【问题标题】:MVC site using WebAPI - ignore API routes in MVC Route Config使用 WebAPI 的 MVC 站点 - 在 MVC 路由配置中忽略 API 路由
【发布时间】:2016-03-22 10:53:54
【问题描述】:

我在我的 MVC 项目中使用 WebAPI,我遇到了 API 路由由 MVC 路由处理的问题。我可以通过更改路由注册的顺序来解决这个问题,例如:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);

    // Register API routes first 
    WebApiConfig.Register(GlobalConfiguration.Configuration);
    RouteConfig.RegisterRoutes(RouteTable.Routes);      
}

但我想知道是否可以通过IgnoreRoute() 方法做到这一点,我试过了:

routes.IgnoreRoute("api/{controller}/{*folder}");

但我收到了一个404 回复,这似乎表明该请求仍由 MVC 路由处理,而不是像以前那样由 WebAPI 处理。

这是我的 API 路由:

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{folder}",
            defaults: new { folder = RouteParameter.Optional }
);

添加了 MVC 路由:

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Info", action = "Index", id = UrlParameter.Optional }
        );

【问题讨论】:

  • 显示你的 mvc 路由配置。您可能在那里有一条与您的 api 路线匹配的路线
  • 我通常在 mvc 路由之前添加我的 web api 路由
  • @Nkosi 编辑添加,但是我已经知道了,我正在寻找一种方法来防止它被IgnoreRoutes() 方法匹配。
  • routes.IgnoreRoute("api/{*any}"); 还不够吗?
  • 引入一个自定义约束,表示控制器名称不能是apiasp.net/mvc/overview/older-versions-1/controllers-and-routing/…

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


【解决方案1】:

引入一个自定义约束,表示控制器名称不能是api

这是一个基于MVC documentation的示例

public class NoApiControllerConstraint : IRouteConstraint
{
    public bool Match
        (
            HttpContextBase httpContext, 
            Route route, 
            string parameterName, 
            RouteValueDictionary values, 
            RouteDirection routeDirection
        )
    {
        return values["controller"] != "api";
    }
}

routes.MapRoute(
        "Default",
        "{controller}/{action}",
        new {controller="Home"},
        new {isNotForApi=new NoApiControllerConstraint()}
);

【讨论】:

    猜你喜欢
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    相关资源
    最近更新 更多