Web API 方法永远不会被路由到

我以前玩过 web api,我似乎总是遇到同样的问题,我的方法没有被路由到。


我的应用程序具有该应用程序洞察包,因此我可以看到它捕获了我发出的请求 - 通过查看我的方法签名上方的请求行,但它们从未真正执行并且 App Insights 报告失败的请求。


这是我的 WebApiConfig


config.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。


我一定是做错了什么,因为我总是遇到这个


呼唤远方
浏览 145回答 1
1回答

跃然一笑

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();
打开App,查看更多内容
随时随地看视频慕课网APP