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

时间:2018-05-18 01:34:38

标签: c# asp.net-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应用程序的一部分,因此当我启动项目时,Home / Index视图会显示在我的浏览器中。然后我去邮递员并创建一个指向

的新Get请求
http://localhost:port/api/Example/Test

但这导致了404。

我必须做错事,因为我总是遇到这个

1 个答案:

答案 0 :(得分:4)

WebAPI的默认映射不包括作为路径一部分的操作,因为默认情况下,它希望控制器是资源的主要标识符,而GET / POST / PUT / DELETE谓词用于定义哪个操作跑了。

因此,即使您手动指定ActionName为“Test”,默认处理程序中也没有任何内容可以对其进行模式匹配。

您可以调整默认映射以包含操作,如下所示:

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();