【发布时间】:2015-02-15 05:16:23
【问题描述】:
我正在使用 Microsoft MVC 4 ApiController 为 Ember 应用程序呈现 JSON。 ApiController 返回 JSON,如下所示:
[{"id": 1, "customerName": "Customer 1"}]
Ember 期望 JSON 被这样的 objectroot 格式化:
{"customers": [{"id": 1, "customerName": "Customer 1"}]
发布新的客户记录也是如此。 Ember 发布带有 objectroot 的 JSON,而 MVC 期望 JSON 没有 objectroot:
{"customers": [{"customerName": "Customer 1"}]
我已更改 WebApiConfig 以将 JSON 属性更改为驼峰式(因此键看起来像“customerName”而不是“CustomerName”)。我相信可以添加一个 JsonConverter 来添加/删除 JSON objectroot,但我不知道该怎么做。
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:谢谢!我已经更新了问题并从我的解决方案中提取了相关的控制器源代码。
-
查看这篇博文。它可能会有所帮助。 emadibrahim.com/2014/04/09/…
-
您可能会发现这很有用gist.github.com/eed3si9n/4554127
标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api json.net