【问题标题】:Remove "api" prefix from Web API url从 Web API url 中删除“api”前缀
【发布时间】:2016-06-12 09:45:00
【问题描述】:

我有一个 API 控制器

public class MyController : ApiController { ... }

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

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

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

【问题讨论】:

  • api字在WebApiConfig静态类的Register方法中配置。
  • 你使用的是属性路由还是基于约定的路由?

标签: c# asp.net asp.net-web-api asp.net-mvc-routing


【解决方案1】:

默认注册通常在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 }
        );
    }
}

您需要在基于约定的设置中编辑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 }
        );
    }
}

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

【讨论】:

  • 我只想提一下默认的 AccountController 有[RoutePrefix("api/Account")],所以为了让这个也适用于这个控制器,你也需要从这里删除api/
猜你喜欢
  • 2018-09-10
  • 1970-01-01
  • 2017-01-01
  • 2020-04-16
  • 1970-01-01
  • 2021-07-26
  • 2015-10-25
  • 1970-01-01
  • 2018-02-20
相关资源
最近更新 更多