2013-09-22 2 views
0

Я пытаюсь отправить данные в EntitySetController, но сущность, полученная контроллером, всегда null.Не удается отправить в EntitySetController, полученный объект равен нулю

OData конфигурации является:

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 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; 
     } 
    } 

ZipCode определяется как так:

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, но полученный объект всегда null.

{"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 и ZipCodeType полеев (все не поле цитаты) как "Version":"20" и "ZipCodeType":"3", все отлично и получил юридическое лицо not null.

Пожалуйста, помогите решить эту проблему.

+1

Убедитесь, что у вас есть заголовок Content-Type для вашего запроса. –

ответ

1

Обозначения в OData V3 не поддерживаются. Таким образом, веб-API OData вместо этого моделирует их как строки. Вот почему вам нужно следовать строковому синтаксису i.e, указанному.

Кроме того, он всегда помогает проверить состояние модели на наличие ошибок, если входящий параметр равен нулю. Подробнее в этом блоге post. Пример кода ниже помогает,

if (!ModelState.IsValid) 
{ 
    throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState); 
} 
Смежные вопросы