2014-02-27 4 views
1

API를 처음 사용하기 때문에 ASP.NET MVC에서 상황이 발생합니다. 내 도메인 시스템에서ASP.NET MVC 프로젝트 : 복잡한 입력 매개 변수가있는 RESTful API 메서드

, 나는 그런 Invoice 서로 다른 개념을 가지고있다. 가 가능하다 어디하는 REST API를 만들려면 :

  • 업데이트
  • 삭제 선택 만들기 (다른 요소에 따라)

그러나, 예를 들어, 새 객체를 만들 때 많은 매개 변수 집합이 필요합니다 (아래 예제보기 모형 참조).

나는 이와 같은 경로를 예상하는 경우 :

POST - /api/invoice/create 

어떻게 주위에 가서 양식 데이터를 받아 들일 것인가?

내 추측은 APIController을하고있는 유일한 매개 변수로 InvoiceViewModel을 수용하는 것입니다. API 컨트롤러이므로 기본적으로 JSON을 허용한다고 가정합니다.

그런 다음 나는 다음과 같은 질문 (들)이 : jQuery를에

  • , 나는에 JSON 객체를 구축 할 방법을이 InvoiceViewModel "만족"을?
  • 더 복잡한 제품을 처리하는 가장 좋은 방법입니까?

InvoiceViewModel 다음 Asp.net-MVC 3 프레임 워크에 대한 기본 JsonValueProviderFactory가

public class InvoiceViewModel 
    { 
     public int Id { get; set; } 

     public string Comment { get; set; } 

     public InvoiceAddressViewModel CompanyInfo { get; set; } 
     public InvoiceAddressViewModel ReceiverInfo { get; set; } 

     public DateTime DateCreated { get; set; } 

     public List<InvoiceLineViewModel> Lines { get; set; } 

     public decimal Total { get; set; } 
     public decimal VatTotal { get; set; } 
     public decimal VatPercentage { get; set; } 
     public decimal TotalExVat { get; set; } 

     public InvoiceViewModel() 
     { 
      this.Lines = new List<InvoiceLineViewModel>(); 
     } 
    } 

    public class InvoiceAddressViewModel 
    { 
     public string Name { get; set; } 
     public string Address { get; set; } 
     public string Company { get; set; } 
     public string VatNumber { get; set; } 
     public string Country { get; set; } 
     public string ZipCode { get; set; } 
     public string City { get; set; } 
    } 

    public class InvoiceLineViewModel 
    { 
     public string Title { get; set; } 
     public int Quantity { get; set; } 
     public decimal Price { get; set; } 
    } 

답변

3

있다가, 한 당신의 JSON 데이터가 활동에 게시 된 모델은 데이터 바인딩해야 일치 바르게.

그래서 이런 식으로 뭔가 :.

var requestData = { 
    Id: "1", 
    Comment: "The quick brown fox", 
    CompanyInfo: { 
     Name: "etc." 
    } 
    }; 

    $.ajax({ 
    url: '/api/invoice/create', 
    type: 'POST', 
    data: JSON.stringify(requestData), 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    error: function (xhr) { 
     alert('Error: ' + xhr.statusText); 
    }, 
    success: function (result) { 
     alert('success'); 
    } 
    }); 

그냥 모델 이름으로 JSON 속성 이름과 일치 (가 일치해야 함), 모든 데이터가 올바르게 결합해야한다, 잘 작동해야

모델을 일치시키기위한 가장 좋은 방법은보기에서 모델을 JSON으로 직렬화 한 다음 올바른지 확인하고 마음 내용에 맞게 조작하는 것입니다. 복잡성에 관해서는

var data = set(@Html.Raw(new JavaScriptSerializer().Serialize(Model)));

, 하늘은 당신이 (매우 가능성) .NET의 기본 JsonValueProviderFactory가 충분하지 않습니다 일부 시나리오로 실행할 수 있습니다 한계, 그러나 당신이 경우에 나는 놀라게 될 것이다.

그냥 보조 노트로,이 모든 사용 사례는 http://knockoutjs.com/로 멋지고 작동합니다.

재미있게 보내십시오.

+0

위와 같이 추가하면 Ajax를 사용할 수도 있습니다.BeginForm을 호출하고 AjaxOptions의 Url 매개 변수에서 웹 API URL을 지정하십시오. 이 stackoverflow에 대한 답변을보십시오 제 답변 http://stackoverflow.com/questions/16510873/html-beginform-routing-to-web-api – Amila

관련 문제