30

私の Web アプリケーションでは、 glabal.asax からの URL を検証しています。URL を検証し、必要に応じてアクションにリダイレクトする必要があります。リクエストイベントをキャッチするために Application_BeginRequest を使用しています。

  protected void Application_BeginRequest(object sender, EventArgs e)
    {
        // If the product is not registered then
        // redirect the user to product registraion page.
        if (Application[ApplicationVarInfo.ProductNotRegistered] != null)
        {
             //HOW TO REDIRECT TO ACTION (action=register,controller=product)
         }
     }

または、mvc でリクエストを取得しながら各 URL を検証し、必要に応じてアクションにリダイレクトする他の方法はありますか

4

9 に答える 9

29

上記のすべてが機能せず、メソッドを実行するループに陥りますApplication_BeginRequest

使用する必要があります

HttpContext.Current.RewritePath("Home/About");
于 2014-09-11T10:49:22.890 に答える
25

リダイレクトには以下のコードを使用してください

   Response.RedirectToRoute("Default");

「デフォルト」はルート名です。アクションにリダイレクトしたい場合は、ルートを作成し、そのルート名を使用してください。

于 2011-10-05T06:26:48.310 に答える
14

すでに述べた方法に加えて。もう 1 つの方法は、エラーが発生してユーザーをログイン ページにリダイレクトする必要があるシナリオで使用した URLHelper を使用することです。

public void Application_PostAuthenticateRequest(object sender, EventArgs e){
    try{
         if(!Request.IsAuthenticated){
            throw  new InvalidCredentialException("The user is not authenticated.");
        }
    } catch(InvalidCredentialException e){
        var urlHelper = new UrlHelper(HttpContext.Current.Request.RequestContext);
        Response.Redirect(urlHelper.Action("Login", "Account"));
    }
}
于 2016-05-12T00:25:48.407 に答える
6

これを試して:

HttpContext.Current.Response.Redirect("...");
于 2011-08-16T16:43:53.550 に答える
4

私はこのようにします:

        HttpContextWrapper contextWrapper = new HttpContextWrapper(this.Context);

        RouteData routeData = new RouteData();
        routeData.Values.Add("controller", "Home");
        routeData.Values.Add("action", "FirstVisit");

        IController controller = new HomeController();

        RequestContext requestContext = new RequestContext(contextWrapper, routeData);

        controller.Execute(requestContext);
        Response.End();

このようにして、着信要求コンテキストをラップし、クライアントをリダイレクトせずに別の場所にリダイレクトします。そのため、リダイレクトによって、global.asax で別の BeginRequest がトリガーされることはありません。

于 2015-06-02T14:03:53.870 に答える
-4

これで試すことができます:

Context.Response.Redirect(); 

確かにね。

于 2011-08-16T10:45:57.040 に答える