[英]MVC4 API Routing goes to first action
我正在嘗試編寫API。 簽名看起來像這樣:
public class CardsController : ApiController
{
[HttpGet]
public ClientData NewGame(){...}
[HttpGet]
public ClientData Deal(int sessionId){...}
[HttpGet]
public ClientData Stand(int sessionId){...}
}
由於其他一切都是默認的,我收到一個錯誤,說我的班級無法區分交易和支持。 經過一番研究后,我發現這是一個路由問題。 所以我決定更新我的路由。
我的global.asax.cs現在看起來像這樣:
public class MvcApplication : HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AuthConfig.RegisterAuth();
RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapHttpRoute("api", "api/{controller}/{action}/{value}", new { value = RouteParameter.Optional});
}
}
轉到http://localhost:54924/api/Cards/Stand/19
會出現錯誤,指出沒有找到HttpResource,並且轉到http://localhost:54924/api/Cards/Stand
會觸發NewGame()
操作。 如何讓Stand和Deal在同一個控制器上工作?
Web API與RESTful路由一起使用。 在REST中,您可以使用它們進行資源和標准操作:GET,POST,PUT,PATCH和DELETE。 這就是你的行為應該被命名的方式。 Deal
和Stand
意味着在RESTful
路由中絕對注意到。 在設計API時,您應該考慮資源和可以使用這些資源執行的標准HTTP謂詞。 在RESTful API中,控制器表示您的資源,HTTP謂詞是您要使用此資源執行的操作。
如果要違反Web Api路由中內置的默認RESTful約定,則必須修改路由設置並在其中包含{action}
名稱。 然后,您可以根據需要為自己的行為命名。 請記住,如果您正在設計API,則會有消費者遵守的標准。 如果您想重新發明輪子,請確保您有非常好的API文檔。
添加路線:
routes.MapHttpRoute("DealApi",
"api/{controller}/deal/{sessionId}",
new { action="Deal", sessionId = RouteParameter.Optional });
routes.MapHttpRoute("StandApi",
"api/{controller}/stand/{sessionId}",
new { action="Stand", sessionId = RouteParameter.Optional });
現在,在您的Controller類中:
[HttpGet]
[ActionName("Deal")]
public ClientData Deal(int sessionId){...}
[HttpGet]
[ActionName("Stand")]
public ClientData Stand(int sessionId){...}
現在,無論何時拉出網址http://www.yourhost.com/api/deal/12345 ,都會調用Deal函數。 與Stand相同。
請記住,您在路線表中設置的任何內容僅用於識別網址是否有效。 通過在第三個參數中指定操作,您將告訴Web Api找到一個ActionName屬性設置為您指定的函數。
另一件事 - 將這兩條路線放在任何默認的api路線之前。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.