从Web API网址中删除"api"前缀

Wal*_*mar 10 c# asp.net asp.net-mvc-routing asp.net-web-api

我有一个API控制器

public class MyController : ApiController { ... }
Run Code Online (Sandbox Code Playgroud)

默认情况下它映射到URL mysite/api/My/Method,我希望它没有"api"前缀的URL:mysite/My/Method

设置控制器属性[RoutePrefix("")]对我没有帮助.

还有其他方法可以实现吗?

Nko*_*osi 17

默认注册通常在,WebApiConfig并且往往看起来像这样

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 }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

您需要routeTemplate在基于约定的设置中进行编辑.

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Attribute routing.
        config.MapHttpAttributeRoutes();

        // Convention-based routing.
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果此项目与MVC共享,api前缀的原因是为了避免两个框架之间的路由冲突.如果Web API是唯一使用的东西那么应该没有问题.