自定义 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 }
        );
    }
}