之前我曾经使用过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。
我必须做错事,因为我总是遇到这个
答案 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();