0

私は、リクエストURLを解析し、この部分をチェックし、別のURLにリダイレクトする、global.asaxのBeginRequestイベントに機能を持っています。私のルートを使ってglobal.asaxでURLを生成する方法。 int asp.net mvc

問題:routeNameからURLを生成する方法。ルートを変更するとリダイレクト機能が動作するため、これを実行したいと思います。 私は、コードを好きではない:ビューで

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

は私がUrl.RouteUrlを使用することができますが、Global.asaxの中で、私はRequestContextのとRouteDataパラメータを手動でUrlHelperオブジェクトを作成する必要があります。どこでroutedataオブジェクトを入手できますか?

答えて

0

私は、リクエストURLを解析し、ユーザーの一部を確認して別のURLにリダイレクトする、global.asaxのBeginRequestイベントで機能します。

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); 
     } 
    } 
} 

そして今、すべて:これを達成するために、よりMVCish方法はcustom action filterを使用して、コントローラのアクションが呼び出される前に呼び出されますOnActionExecuting方法でこの処理を行うことであろう

それはすべてのアクションに適用されるように、この属性でベースコントローラーを装飾することです。

+0

お返事ありがとうございます。しかし、私の場合、私はglobal.asaxでこの状況を処理する必要があります。なぜなら、私は注射のために単一性を使用しているからです。私はコントローラインスタンスを作成するactionfilter属性のメカニズムを選択した場合、私は開始要求を使用する場合、何もアクションはperfomedされません。より高性能なバリアント –

+0

global.asaxでこれを処理しなければならない特別な理由はありますか?なぜASP.NET MVCが提供しなければならない恩恵を受けるのでしょうか?私はあなたが既にASP.NET MVCを使用する選択をしてきたので、それを正しくしないのはなぜですか? –

+0

私は私の答えを完了していないと入力を押す:)申し訳ありません。私はスタックオーバーフローのために新しいです。 –

関連する問題