2012-06-03 81 views
2

當我從我的MVC應用程序請求以下URL時,我經常被重定向到HomeController。ASP.NET MVC Ignore.Routing問題

www.mymvcapp.com/?m=standardvalue &一個= someothervalue &碼= 12345

現在我想要通過edditing所述的Global.asax.cs請求路由,例如,以克服這

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

所以我期待的結果是,只要網址中包含「M = standardvalue」它不會帶我去HomeController的。這可能是我完全錯誤的做法,有人可以指出我解決問題的好方向。

附加信息: 該鏈接看起來不像MVC,這是因爲Apllication Request Routing(IIS7)捕獲此URL並將其轉換爲運行PHP的Web服務器。

回答

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() } 
); 
+0

太好了!這工作,所以謝謝你。接下來,我想添加standardvalue1,standardvalue2 ..所以如果你有一個簡單的修復,請讓我知道。 – sam

+0

在約束中使用正則表達式來驗證m是否與您的表達式匹配 – Loupi

+0

感謝您的快速回復,我通過向DefaultWithoutParamsConstraint()添加了2個屬性(參數和值)並通過lamda表達式加載它 – sam