我以前玩过 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 关注
- 144 浏览
添加回答
举报
0/150
提交
取消