ASP.NET APIController 未在 json 中返回数据对象
ASP.NET APIController not returning data object in json
我目前正在使用 Angular 2 和 ASP.NET 开发一个小原型。
根据 angular.io 文档 (https://angular.io/docs/ts/latest/guide/server-communication.html):"We shouldn't expect json() to return the heroes array directly. The server we're calling always wraps JSON results in an object with a dataproperty. We have to unwrap it to get the heroes. This is conventional web api behavior, driven by security concerns."
我在 ASP.NET 中构建了一个 APIController 来获取 JSON 中的英雄列表。这是我的代码:
[DataContract]
public class Hero
{
[DataMember]
public string id { get; set; }
[DataMember]
public string name { get; set; }
public Hero(string id, string name)
{
this.id= id;
this.name = name;
}
}
public class HeroesController : ApiController
{
// GET api/<controller>
public IEnumerable<Hero> Get()
{
return new Hero[] { new Hero("1", "TEST HERO #1"),
new Hero("2", "TEST HERO #2")};
}
}
但奇怪的是,我的 ApiController 返回给我这个 JSON 响应:
[{"id":"1","name":"TEST HERO #1"}, {"id":"2","name":"TEST HERO #2"}]
而不是像这样的东西:
{"data": [{"id":"1","name":"TEST HERO #1"}, {"id":"2","name":"TEST HERO #2"}]}
您知道为什么 ASP.NET Web api 不遵循此安全建议吗?或者我做错了什么?
非常感谢!
MVC return完全按照您编写的代码执行。相反,您可以 return 匿名 class 喜欢
return new { data = new Hero[] { new Hero(...), new Hero(...) } };
虽然我在谈论这个主题,但您可能希望养成使用 HttpResponseMessage
模式的习惯。你做事的方式没有明显的错误,但这允许对你正在响应的响应进行大量精细控制 returning,包括自定义错误消息和缓存过期等内容。
public HttpResponseMessage Get()
{
try
{
var result = new { data = new Hero[] { new Hero(...), new Hero(...) } };
return Request.CreateResponse(result);
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "My custom error message");
}
}
我目前正在使用 Angular 2 和 ASP.NET 开发一个小原型。
根据 angular.io 文档 (https://angular.io/docs/ts/latest/guide/server-communication.html):"We shouldn't expect json() to return the heroes array directly. The server we're calling always wraps JSON results in an object with a dataproperty. We have to unwrap it to get the heroes. This is conventional web api behavior, driven by security concerns."
我在 ASP.NET 中构建了一个 APIController 来获取 JSON 中的英雄列表。这是我的代码:
[DataContract]
public class Hero
{
[DataMember]
public string id { get; set; }
[DataMember]
public string name { get; set; }
public Hero(string id, string name)
{
this.id= id;
this.name = name;
}
}
public class HeroesController : ApiController
{
// GET api/<controller>
public IEnumerable<Hero> Get()
{
return new Hero[] { new Hero("1", "TEST HERO #1"),
new Hero("2", "TEST HERO #2")};
}
}
但奇怪的是,我的 ApiController 返回给我这个 JSON 响应: [{"id":"1","name":"TEST HERO #1"}, {"id":"2","name":"TEST HERO #2"}]
而不是像这样的东西: {"data": [{"id":"1","name":"TEST HERO #1"}, {"id":"2","name":"TEST HERO #2"}]}
您知道为什么 ASP.NET Web api 不遵循此安全建议吗?或者我做错了什么?
非常感谢!
MVC return完全按照您编写的代码执行。相反,您可以 return 匿名 class 喜欢
return new { data = new Hero[] { new Hero(...), new Hero(...) } };
虽然我在谈论这个主题,但您可能希望养成使用 HttpResponseMessage
模式的习惯。你做事的方式没有明显的错误,但这允许对你正在响应的响应进行大量精细控制 returning,包括自定义错误消息和缓存过期等内容。
public HttpResponseMessage Get()
{
try
{
var result = new { data = new Hero[] { new Hero(...), new Hero(...) } };
return Request.CreateResponse(result);
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "My custom error message");
}
}