![](/img/trans.png)
[英]One route for multiple action( difference name, http verb) in 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期望的默認命名約定。
查看此官方文檔:
如果您不想遵循約定,可以嘗試上面鏈接的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.