3

Я использую Microsoft MVC 4 ApiController для рендеринга JSON для приложения Ember. ApiController возвращает JSON, который выглядит как:MVC ApiController JSON objectroot

[{"id": 1, "customerName": "Customer 1"}]

Ember ожидает JSON быть отформатирован с objectroot, как это:

{"customers": [{"id": 1, "customerName": "Customer 1"}]

То же самое для размещения новой записи клиентов. Ember сообщений в формате JSON, который имеет objectroot, в то время как MVC ожидает JSON, чтобы быть без objectroot:

{"customers": [{"customerName": "Customer 1"}]

Я изменил WebApiConfig изменить JSON атрибуты верблюжьего (так что ключи выглядит как «CUSTOMERNAME» вместо «CustomerName»). Я считаю, что можно добавить JsonConverter для добавления/удаления объектного объекта JSON, но я не могу понять, как это сделать.

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First(); 
     jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

Контроллер выглядит следующим образом:

public class CustomersController : ApiController 
{ 
    private DatabaseContext db = new DatabaseContext(); 

    public IEnumerable<Customer> GetCustomers() 
    { 
     return db.Customers.AsEnumerable(); 
    } 

    public HttpResponseMessage PostCustomer([FromBody] Customer customer) 
    { 
     if (ModelState.IsValid) 
     { 
      db.Customers.Add(customer); 
      db.SaveChanges(); 

      HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, customer); 
      response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = customer.Id })); 
      return response; 
     } 
     else 
     { 
      return Request.CreateResponse(HttpStatusCode.BadRequest); 
     } 
    } 
} 
+0

Ну, во-первых, это WebApi, а не MVC. WebApi может поставляться с MVC4, но это две разные технологии. Во-вторых, это может помочь, если вы указали действие своего контроллера и как вернуть данные. –

+0

@ErikFunkenbusch: Спасибо! Я обновил вопрос и извлек соответствующий исходный код контроллера из моего решения. – Martin

+1

Посмотрите это сообщение в блоге. Это может помочь. http://emadibrahim.com/2014/04/09/emberjs-and-asp-net-web-api-and-json-serialization/ –

ответ

1

Вы могли бы сделать что-то вроде этого, оберните ваш объект в родительский объект, который имеет свойство клиентов, хотя я не проверял:

var mycust = new { customers = customer }; 
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, mycust); 

Или вы можете использовать пользовательские форматирования, так как в этом суть:

https://gist.github.com/eed3si9n/4554127

Смежные вопросы