2010-11-26 31 views
0

我在global.asax中的BeginRequest事件中具有解析請求url的功能,請檢查此部分並將用戶重定向到另一個url。如何使用我的路線在global.asax中生成網址。 int asp.net mvc

問題:如何從routeName生成url。我想這樣做,因爲如果路由將被改變,重定向功能將起作用。 我不喜歡的代碼:

String.Format("{0}/{1}/{2}", host, part1, part2); 

鑑於我可以使用Url.RouteUrl,但在global.asax中我不得不用的RequestContext和的RouteData參數手動創建UrlHelper對象。我在哪裏可以得到routedata對象?

回答

0

我在global.asax中的BeginRequest事件中具有解析請求url的功能,請檢查此部分並將用戶重定向到另一個url。

MVCish的方式來實現,這將是使用custom action filter,並在OnActionExecuting方法控制器動作被調用之前將其稱之爲執行該處理:

public class CustomFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // read some value from the request 
     string value = filterContext.RequestContext.RouteData.Values["someValue"] as string; 
     if (!IsValueValid(value)) 
     { 
      // if the value is invalid redirect to some controller action 
      filterContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary(new 
       { 
        action = "foo", 
        controller = "bar" 
       }) 
      ); 
     } 
     else 
     { 
      base.OnActionExecuting(filterContext); 
     } 
    } 
} 

而現在所有剩下的就是用這個屬性來修飾你的基礎控制器,這樣它就適用於所有的動作。

+0

感謝您的回覆。但對於我的情況,我不得不在global.asax中處理這種情況,因爲我正在使用統一進行注入。如果我選擇actionfilter屬性機制創建控制器實例將被執行,如果我使用開始請求沒有行動將被執行。它更高性能的變種 – 2010-11-26 11:37:57