首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不返回json中的数据对象的ASP.NET APIController

不返回json中的数据对象的ASP.NET APIController
EN

Stack Overflow用户
提问于 2016-03-02 16:33:21
回答 1查看 308关注 0票数 0

我目前正在开发一个带有角2和ASP.NET的小原型。

根据angular.io文档(https://angular.io/docs/ts/latest/guide/server-communication.html):“我们不应该期望json()直接返回英雄数组。我们调用的服务器总是将JSON结果包装在一个具有数据属性的对象中。我们必须打开它以获得英雄。这是传统的wraps行为,由安全考虑驱动。”

请参阅此链接:outside

我在ASP.NET中构建了一个ASP.NET来获取JSON中的英雄列表。这是我的代码:

代码语言:javascript
复制
[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不遵循这个安全建议吗?还是我做错了什么?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-02 16:38:58

MVC正在返回您编写的代码所做的工作。相反,您可以返回一个匿名类,例如

代码语言:javascript
复制
return new { data = new Hero[] { new Hero(...), new Hero(...) } };

在我讨论这个主题时,您可能希望养成使用HttpResponseMessage模式的习惯。做事情的方式没有明显的错误,但是这允许对返回的响应进行很多精细的控制,包括自定义错误消息和缓存过期。

代码语言:javascript
复制
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");
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35752988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档