2017-03-04 4 views
0

Json 문자열을 내 Rest API에 전달할 수없는 이유를 찾으려고합니다.웹 API 매개 변수는 항상 Null입니다.

WebAPI 및 Entityframework를 사용하여 VS 2015에서이 프로젝트를 만들었습니다. Odata V3 Controller와 엔티티 클래스는 VS에 의해 자동 생성됩니다. GET 및 DELETE 메서드는 제대로 작동합니다. 하지만 내 Json 개체를 나머지 API 게시 및 메서드에 전달할 수 없기 때문에 업데이트 및 메서드 추가가 작동하지 않습니다. 매개 변수는 항상 비어 있습니다.

내 생성 된 고객 엔티티 클래스는 다음과 같습니다. 여기

public partial class Customer 
{ 
    public int CustomerID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Address { get; set; } 
    public string PhoneNumber { get; set; } 
    public string Email { get; set; } 
} 

이 내 JQuery와 전화 내 컨트롤러

public IHttpActionResult Post(Customer customer) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     db.Customers.Add(customer); 
     db.SaveChanges(); 

     return Created(customer); 
    } 

    // PUT: odata/Customers(5) 
    public IHttpActionResult Put([FromODataUri] int key, Delta<Customer>  patch) 
    { 
     Validate(patch.GetEntity()); 

     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     Customer customer = db.Customers.Find(key); 
     if (customer == null) 
     { 
      return NotFound(); 
     } 

     patch.Put(customer); 

     try 
     { 
      db.SaveChanges(); 
     } 
     catch (DbUpdateConcurrencyException) 
     { 
      if (!CustomerExists(key)) 
      { 
       return NotFound(); 
      } 
      else 
      { 
       throw; 
      } 
     } 

     return Updated(customer); 
    } 

입니다 여기에

var customerData = { 
     CustomerID: "0", 
     FirstName: FirstName, 
     LastName: LastName, 
     Address: Address, 
     PhoneNumber: PhoneNumber, 
     Email: Email 
    }; 

    var requestBody = JSON.stringify(customerData); 
    return $.ajax({ 
     url: requestUri, 
     type: "POST",     
     data: requestBody 
    }); 

내 피들러입니다

POST http://localhost:1360/odata/Customers/ HTTP/1.1 
Accept: application/json, text/javascript, */*; q=0.01 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
X-Requested-With: XMLHttpRequest 
Referer: http://localhost:1360/Pages/Customers.aspx 
Accept-Language: en-US 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko 

연결 : 연결 유지 콘텐츠 길이를 : 101 01 23,516,호스트 : 로컬 호스트 : 1360 에서 Pragma : 다른 사람을 위해 일 관련 게시물의

{"CustomerID":0,"FirstName":"wer","LastName":"wer","Address":"wer","PhoneNumber":"wer","Email":"wer"} 

아무도 나를 위해 작동하지 않습니다 노 캐시 : 사전에

Receiving JSON-formatted data in a Web API 2 action?

jQuery AJAX post data is null in c# web api controller

감사합니다. 코드의 문제점과 해결 방법을 알려주십시오.

+0

잠시 동안 odata3을 사용하지 않았지만 put/post가 델타를 사용하지 않을 것이라고 생각했지만 패치 작업 만 수행합니다. 메소드 서명에서 델타 대신 고객을 시도하면 어떻게됩니까? – Tim

+0

이 코드는 VS에서 자동 생성됩니다. post 메서드는 서명에 고객 만 있지만 디버깅하는 동안 null 값을받습니다. json 문자열이 전송 되더라도. 서버가이를 역 직렬화 할 수 없습니다. – Sam

답변

0

문제점을 발견했습니다. Ajax 호출에서 contentType : "application/json"을 추가해야합니다. 요청을 업데이트하자마자 코드가 작동하기 시작했습니다.

감사합니다. 도움이 될 수 있습니다.

관련 문제