Я использую 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);
}
}
}
Ну, во-первых, это WebApi, а не MVC. WebApi может поставляться с MVC4, но это две разные технологии. Во-вторых, это может помочь, если вы указали действие своего контроллера и как вернуть данные. –
@ErikFunkenbusch: Спасибо! Я обновил вопрос и извлек соответствующий исходный код контроллера из моего решения. – Martin
Посмотрите это сообщение в блоге. Это может помочь. http://emadibrahim.com/2014/04/09/emberjs-and-asp-net-web-api-and-json-serialization/ –