2

当我从我的 MVC 应用程序请求以下 URL 时,我不断地被重定向到 HomeController。

www.mymvcapp.com/?m=standardvalue&a=someothervalue&code=12345

现在我试图通过编辑 Global.asax.cs 请求路由来克服这个问题,例如

routes.IgnoreRoute(".*m=standardvalue.*");

因此,我期望的结果是,只要 URL 包含“m=standardvalue”,它就不会将我带到 HomeController。可能是我做错了,有人可以为我指出解决问题的好方向。

附加信息:该链接看起来不像 MVC,那是因为应用请求路由 (IIS7) 捕获此 URL 并将其转换为运行 PHP 的网络服务器。

4

1 回答 1

1

你在这里需要的是一个路由约束。如果请求的 URL 没有目标控制器并且包含带有等于标准值的变量 m 的查询字符串,则约束将返回 true。

public class DefaultWithoutParamsConstraint : IRouteConstraint
{
    public bool Match(HttpContextBase httpContext,
                      Route route,
                      string parameterName,
                      RouteValueDictionary values,
                      RouteDirection routeDirection)
    {
        return values[parameterName] == null &&
               httpContext.Request.QueryString["m"] == "standardvalue";
    }
}

现在只需将此约束添加到您的忽略列表中:

routes.IgnoreRoute(
    "{*controller}",
    new { controller = new DefaultWithoutParamsConstraint() }
);
于 2012-06-03T17:22:55.463 回答