自定义 WebApi 路由不起作用
Custom WebApi routing not working
我正在尝试为 Web api 控制器创建自定义路由:
[System.Web.Http.RoutePrefix("api/admin")]
public class AdminApiController : BaseApiController
{
[Route("~/echo")]
public string Echo()
{
return "Hello World";
}
}
我希望转到 http://example.com/api/admin/echo
并收到 'Hello world' 但我却收到错误消息:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://example.com/api/admin/echo'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'admin'.
</MessageDetail>
</Error>
替换波浪号 (~)
方法属性上的波浪号 (~) 覆盖
控制器的route prefix:
[RoutePrefix("api/admin")]
public class AdminApiController : BaseApiController {
// GET /api/admin/echo
[HttpGet]
[Route("echo")]
public string Echo() {
return "Hello World";
}
// GET /echo
[HttpGet]
[Route("~/echo")]
public string Echo2() {
return "Hello World 2";
}
}
为了安全起见,您还需要确保 Enable Attribute Routing
要启用属性路由,请在配置期间调用 MapHttpAttributeRoutes。此扩展方法在 System.Web.Http.HttpConfigurationExtensions class 中定义。
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我正在尝试为 Web api 控制器创建自定义路由:
[System.Web.Http.RoutePrefix("api/admin")]
public class AdminApiController : BaseApiController
{
[Route("~/echo")]
public string Echo()
{
return "Hello World";
}
}
我希望转到 http://example.com/api/admin/echo
并收到 'Hello world' 但我却收到错误消息:
<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://example.com/api/admin/echo'.
</Message>
<MessageDetail>
No type was found that matches the controller named 'admin'.
</MessageDetail>
</Error>
替换波浪号 (~)
方法属性上的波浪号 (~) 覆盖 控制器的route prefix:
[RoutePrefix("api/admin")]
public class AdminApiController : BaseApiController {
// GET /api/admin/echo
[HttpGet]
[Route("echo")]
public string Echo() {
return "Hello World";
}
// GET /echo
[HttpGet]
[Route("~/echo")]
public string Echo2() {
return "Hello World 2";
}
}
为了安全起见,您还需要确保 Enable Attribute Routing
要启用属性路由,请在配置期间调用 MapHttpAttributeRoutes。此扩展方法在 System.Web.Http.HttpConfigurationExtensions class 中定义。
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}