簡體   English   中英

Web API路由到操作名稱

[英]Web API route to action name

我需要一個控制器來返回JSON以供JavaScript使用,所以我繼承了ApiController類,但它的行為並不像我預期的那樣。 Apress書籍Pro ASP.NET MVC 4以及我發現的大多數在線示例給出了以下示例:

public class ServicesController : ApiController
{
    public string[] MethodFruit()
    {
        return new string[] { "Apple", "Orange", "Banana" };
}

通過URL訪問:

http://mysite/services/methodfruit

但這永遠不會奏效 - 找不到資源。 我可以使用的唯一方法是讓控制器為每個HTTP動詞包含不同的方法,然后:

http://mysite/api/services

哪個調用GET方法。

我檢查了Apress網站,但他們似乎沒有任何論壇,目前的源代碼是在VS 2012,我沒有使用。 我檢查了源文件,他們似乎認為前一種方法應該有效。 是不是再支持前一種方法?

是的...通常你必須遵循ASP.NET WEB API期望的默認命名約定。

查看此官方文檔:

ASP.NET Web API中的路由

如果您不想遵循約定,可以嘗試上面鏈接的doc中描述的“ 按操作名稱路由”部分。

按操作名稱路由

使用默認路由模板,Web API使用HTTP方法選擇操作。 但是,您也可以創建一個路徑,其中操作名稱包含在URI中:

routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional } );

在你的情況下,你必須這樣做:

[HttpGet]
public string[] MethodFruit()
{
    return new string[] { "Apple", "Orange", "Banana" };
}

如果希望Web API在路由時查找操作名稱,請將App_Start文件夾中的WebApiConfig.cs類更改為:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

然后你可以發出GET請求

http://mysite/api/Services/MethodFruit

添加有關上述答案的其他信息。 添加RoutePrefix有時會解決問題。 希望能幫助到你

調節器

    [RoutePrefix("api/Services")]
    public class ServicesController : ApiController
    {
        [System.Web.Http.AcceptVerbs("GET", "POST")]
        [System.Web.Http.HttpGet]
        [Route("MethodFruit")]
        public string[] MethodFruit()
        {
            return new string[] { "Apple", "Orange", "Banana" };
        }
    }

在配置中

routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional } );

我面臨同樣的問題,我發現我的代碼

using System.Web.Mvc; 

我已經使用System.Web.Http導入了Mvc intead。 所以它使用Mvc路由而不是webApi路由。 我用它替換了

using System.Web.Http 

它對我有用。 我正在添加我的答案,所以新手不會重復同樣的錯誤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM