2013-09-22 2 views
0

데이터를 EntitySetController에 게시하려하지만 컨트롤러가 수신 한 엔티티는 항상 null입니다.EntitySetController에 게시 할 수 없습니다. 수신 된 엔티티가 null입니다.

OData 설정은 다음과 같습니다

public class ZipCodesController : EntitySetController<ZipCode, String> 
    { 
     public IUnitOfWork Iuow { get; set; } 

     public ZipCodesController(IUnitOfWork unitOfWork) 
     { 
      Iuow = unitOfWork; 
     } 

     [Queryable] 
     public override IQueryable<ZipCode> Get() 
     { 
      return Iuow.GetStandardRepository<ZipCode>().GetAll(); 
     } 

     protected override string GetKey(ZipCode entity) 
     { 
      return entity.Id.ToString(); 
     } 
     protected override ZipCode GetEntityByKey(string key) 
     { 
      return Iuow.GetStandardRepository<ZipCode>().GetById(key); 
     } 

     protected override ZipCode CreateEntity(ZipCode entity) 
     { 
      Iuow.GetStandardRepository<ZipCode>().Add(entity); 
      Iuow.Commit(); 
      return entity; 
     } 
    } 

우편 번호 또는 지금과 같이 정의된다 : 나는 다음과 같은 컨트롤러가 한

public static class ODataApiConfig 
     { 
      public static void Register(HttpConfiguration config) 
      { 
       config.Routes.MapODataRoute("DefaultOdata" , "odata" , GetImplicitModel()); 
      } 

     public static IEdmModel GetImplicitModel() 
     { 
      var builder = new ODataConventionModelBuilder(); 
      builder.EntitySet<ZipCode>("ZipCodes");   

      return builder.GetEdmModel(); 
     } 
    } 

public class ZipCode 
     { 
      public Guid Id { get; set; } 
      public long Version { get; set; } 
      public String CreatedBy { get; set; } 
      public String LastModifiedBy { get; set; } 
      public String ZipPostalCode{ get; set; } 
      public ZipCodeType ZipCodeType { get; set; } 
      public Guid CountryId { get; set; } 
      public Guid CountyId { get; set; } 
      public Guid StateId { get; set; } 
      public Guid CityId { get; set; } 
      public String Latitude { get; set; } 
      public String Longitude { get; set; } 

     } 

나는를 게시하려고 해요 다음 엔티티가 Fiddler을 통해 수신되었지만 수신 된 엔티티는 항상입니다..

{"Id":"6b146d72-2681-4d47-8cc4-75e64e2dea66", "Version":20, "CreatedBy":"ae5882fb-b833-46d7-9f58-0505ec2a6f8f","LastModifiedBy":"ae5882fb-b833-46d7-9f58-0505ec2a6f8f","ZipPostalCode":"92020","ZipCodeType": 3,"CountryId":"6a54b9be-8726-4376-a99e-989884e2b724","CountyId":"9c4052fa-49f2-4e5e-995f-317abd16814b","StateId":"0da54905-6acd-4886-a9d1-f3e6d9eb7c60","CityId":"ba543bc1-7eb7-4e14-bbea-2ffcac5b2e2c","Latitude":"36.978256","Longitude":"-121.952464"} 

은 내가 "Version":"20""ZipCodeType":"3"versionZipCodeType 필드 (모든 비 인용 필드)에 대한 따옴표를 사용하는 경우, 모든 좋은 것을 발견하고 실체가 not null입니다 받았다.

이 문제를 해결할 수 있도록 도와주세요.

+1

요청에 대해 'Content-Type'헤더가 있는지 확인하십시오. –

답변

1

열거 형은 OData V3에서 기본적으로 지원되지 않습니다. 따라서 웹 API OData는이를 대신 문자열로 모델링합니다. 그래서 따옴표로 묶인 문자열 구문을 따라야합니다.

또한 들어오는 매개 변수가 null이면 모델 상태의 오류를 검사하는 데 항상 도움이됩니다. 이 블로그의 더 많은 것 post. 아래의 샘플 코드는 도움이됩니다.

if (!ModelState.IsValid) 
{ 
    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState); 
} 
관련 문제