我以前玩過 web api,我似乎總是遇到同樣的問題,我的方法沒有被路由到。我的應用程序具有該應用程序洞察包,因此我可以看到它捕獲了我發出的請求 - 通過查看我的方法簽名上方的請求行,但它們從未真正執行并且 App Insights 報告失敗的請求。這是我的 WebApiConfigconfig.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional };這是我的簡單控制器和方法public class ExampleController : ApiController{ [HttpGet] [ActionName("Test")] public IHttpActionResult Test() { return Ok(); }}這是 MVC 應用程序的一部分,所以當我啟動項目時,主頁/索引視圖會顯示在我的瀏覽器中。然后我去郵遞員并創建一個新的 Get 請求指向http://localhost:port/api/Example/Test但這會導致 404。我一定是做錯了什么,因為我總是遇到這個
1 回答

躍然一笑
TA貢獻1826條經驗 獲得超6個贊
WebAPI 的默認映射不包括作為路由一部分的操作,因為默認情況下,它希望控制器是資源的主要標識符,并且 GET/POST/PUT/DELETE 動詞來定義運行哪個操作。
因此,即使您手動指定“Test”的 ActionName,默認處理程序中也沒有任何內容可以與其進行模式匹配。
您可以調整默認映射以包含操作,如下所示:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
;
但是,您可能會發現您更喜歡屬性路由(我知道我喜歡),您可以像這樣將其應用于您的控制器:
[RoutePrefix("api/Example")]
public class ExampleController : ApiController
{
[HttpGet]
[Route("Test")]
public IHttpActionResult Test()
{
return Ok();
}
}
要啟用屬性路由,您需要將以下內容添加到您的啟動配置中:
config.MapHttpAttributeRoutes();
- 1 回答
- 0 關注
- 160 瀏覽
添加回答
舉報
0/150
提交
取消