【问题标题】:Routing all "/api" requests to a HttpHandler in ASP.NET MVC, using the RouteTable使用 RouteTable 将所有“/api”请求路由到 ASP.NET MVC 中的 HttpHandler
【发布时间】:2012-05-10 23:14:28
【问题描述】:

我遇到了一个问题,即 ASP.NET MVC 框架路由通过其默认路由获取 HttpHandler 所需的 URL 路由,反之亦然:

routes.MapRouteLowercase(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional });// Parameter defaults

我试过忽略我需要的路线:

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

如果我在添加 MVC 路由之前添加到 RouteTable,所有 MVC 路由最终都会指向我的“/api”路由。

如果我在之后添加它们,则路由在路由表中但无法识别。我已经尝试使用 RouteDebugger,它确实将我的路线显示为匹配,但它们从未被调用。

来源在this micro REST framework 我正在写,如果有帮助的话。

【问题讨论】:

标签: asp.net-mvc routes


【解决方案1】:

您需要 MVC 框架为您做路由吗?

如果没有,请看这篇文章:Basic Routing for HttpHandler

如果您需要快速简单的东西,这是一个不错的选择;)

【讨论】:

    【解决方案2】:

    我找到了解决方法,但它没有解释为什么我的 Routes 在 url 根本不以“api/”开头时会在 MVC 路由上大吃一惊。

    我正在使用的解决方法是向我的路由添加一个约束,检查它是否是 Url 生成,然后忽略它,以及是否传入 MVC 数据:

    // Constrain HTTP method, and an extra constraint so MVC urls aren't swallowed.
    route.Constraints = new RouteValueDictionary();
    route.Constraints.Add("httpMethod", new HttpMethodConstraint(new string[] { restAttribute.Method }));
    route.Constraints.Add("MvcContraint", new IgnoreMvcConstraint());
    
    RouteTable.Routes.Add(route);
    

    约束:

    public class IgnoreMvcConstraint : IRouteConstraint
    {
        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
        {
            if (routeDirection == RouteDirection.UrlGeneration)
                return false;
            if (values.ContainsKey("controller") || values.ContainsKey("action"))
                return false;
    
            if (route.Url.StartsWith(RestHttpHandler._baseUrl))
                return true;
            else
                return false;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多