【问题标题】:REST API not returning expected resultsREST API 未返回预期结果
【发布时间】:2017-05-20 16:10:14
【问题描述】:

我正在尝试关注文章Build RESTful API's with ASP.NET Web API 来学习如何创建 RESTful API。

我创建了第一个项目和控制器,Contact

public class ContactController : Controller
{
    // GET: Contact
    public string[] Index()
    {
        return new string[]
        {
            "Hello",
            "World"
        };
    }
}

但是当我在浏览器中加载 URL 时,并没有得到文章中描述的响应 (["Hello","World"])。我得到的回复是System.String[]

我不明白我错过了什么。

顺便说一句,这篇文章是 2013 年的。有谁知道一篇可能更新一点的好文章?

【问题讨论】:

    标签: c# asp.net asp.net-mvc rest asp.net-web-api


    【解决方案1】:

    您现在拥有的是简单的 ASP.NET MVC 控制器。对于 Web API 控制器,您应该从 ApiController 而不是 Controller 继承控制器:

    public class ContactController : ApiController
    

    动作名称也应该以 HTTP 动词开头。如果您将 GET 请求发送到 /api/contact 端点,您将收到错误

    请求的资源不支持 http 方法 'GET'。

    默认情况下,Web API 控制器的路由中不使用操作名称。如果您要检查默认路由配置,它将是api/{controller}/id。通过 HTTP 请求方法选择正确的操作。在您的情况下,它应该是 GetXXX 或只是 Get

    【讨论】:

    • 嗯,是的,情况似乎是这样。想知道为什么会有这样的 POS 文章。直到后面的示例之一才提及ApiControllerGet
    • @JonathanWood 是的,我想知道为什么作者没有指出正确的课程。屏幕截图上只提到了 - 添加新控制器的脚手架模板是 Empty API 控制器
    • 我能再问一个问题吗?看起来它正在返回 JSON。这个可以配置吗?
    • @JonathanWood 是的。这称为内容协商。您应该在请求中传递 Accept 标头。例如。 Accept: application/xml 用于 xml
    • 我理解的是使用常规 URL 调用 REST API。那么如何仅使用 URL 附加标头呢?另外,如果我只想以 CSV 之类的格式返回数据怎么办?这可能吗?
    【解决方案2】:

    您不能从 Web API 返回常规原语。至少如果您使用的是 .net 中的常规 MVC Web API 的话。所以,如果是这种情况,你可以做类似的事情

    public class ContactController : Controller
    {
        // GET: Contact
        public JsonResult Index()
        {   
            return Json(new { value1: "Hello", value2: "world" }, JsonRequestBehavior.AllowGet);
    
        }
    }
    

    希望对你有帮助

    【讨论】:

    • 谢谢,但这不是本文中使用的技术。
    猜你喜欢
    • 1970-01-01
    • 2011-08-09
    • 2010-09-22
    • 2021-05-17
    • 2018-02-19
    • 2018-03-23
    • 2020-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多