我目前正在开发一个带有角2和ASP.NET的小原型。
根据angular.io文档(https://angular.io/docs/ts/latest/guide/server-communication.html):“我们不应该期望json()直接返回英雄数组。我们调用的服务器总是将JSON结果包装在一个具有数据属性的对象中。我们必须打开它以获得英雄。这是传统的wraps行为,由安全考虑驱动。”
请参阅此链接:outside
我在ASP.NET中构建了一个ASP.NET来获取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”:“测试英雄#1"},{"id":"2",”名称“:”测试英雄#2"}
{{“数据”:{"id":"1",“名称”:“测试英雄#1"},{"id":"2",”名称“:”测试英雄#2"}}
您知道为什么ASP.NET Web不遵循这个安全建议吗?还是我做错了什么?
非常感谢!
发布于 2016-03-02 16:38:58
MVC正在返回您编写的代码所做的工作。相反,您可以返回一个匿名类,例如
return new { data = new Hero[] { new Hero(...), new Hero(...) } };在我讨论这个主题时,您可能希望养成使用HttpResponseMessage模式的习惯。做事情的方式没有明显的错误,但是这允许对返回的响应进行很多精细的控制,包括自定义错误消息和缓存过期。
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");
}
}https://stackoverflow.com/questions/35752988
复制相似问题