为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
呼唤远方 2021-06-18 21:16:29
我以前玩过 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();


查看完整回答
反对 回复 2021-06-20
  • 1 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信