Rediriger vers une action de Application BeginRequest dans global.asax

dans mon application web, Je valide l'url de glabal.asax . Je veux valider l'url et le besoin de rediriger vers une action si nécessaire. J'utilise Application_BeginRequest pour saisir l'événement request.

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

ou y a-t-il une autre façon de valider chaque url tout en obtenant les requêtes dans mvc et rediriger vers une action si nécessaire

24
demandé sur Ognyan Dimitrov 2011-08-16 14:40:32

8 réponses

Tout ce qui précède ne fonctionnera pas vous serez dans la boucle de l'exécution de la méthode Application_BeginRequest.

Vous devez utiliser

HttpContext.Current.RewritePath("Home/About");
22
répondu Afazal 2014-09-11 11:11:17

Utilisez le code ci-dessous pour redirection

   Response.RedirectToRoute("Default");

"par Défaut" est le nom de l'itinéraire. Si vous voulez rediriger vers une action,il vous suffit de créer une route et d'utiliser ce nom de route .

22
répondu Null Pointer 2016-04-12 09:17:27

outre les voies déjà mentionnées. Une autre façon est D'utiliser URLHelper que j'ai utilisé dans un scénario une fois l'erreur happend et L'utilisateur devrait être redirigé vers la page de connexion:

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"));
    }
}
9
répondu Nelly Sattari 2016-11-04 05:47:59

essaye ceci:

HttpContext.Current.Response.Redirect("...");
5
répondu James Johnson 2011-08-16 16:43:53

je fais comme ceci:

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

de cette façon, vous enveloppez le contexte de requête entrante et le redirigez vers un autre endroit sans rediriger le client. Ainsi, la redirection ne déclenchera pas une autre demande de Begin dans le global.asax.

2
répondu Tim Geerts 2015-06-02 14:03:53
 Response.RedirectToRoute(
                                new RouteValueDictionary {
                                    { "Controller", "Home" },
                                    { "Action", "TimeoutRedirect" }}  );
0
répondu evgnib 2015-01-23 09:00:32

j'ai eu une vieille application de formulaires web que j'ai dû convertir en MVC 5 et l'une des exigences était le support possible {old_form}.liens aspx. Mondiale.ASAX Application_BeginRequest j'ai mis en place une instruction switch pour gérer les vieilles pages pour les rediriger vers les nouvelles et pour éviter la possible boucle indésirable à la vérification de route home/default pour ".aspx" dans L'URL brute de la requête.

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        OldPageToNewPageRoutes();
    }

    /// <summary>
    /// Provide redirects to new view in case someone has outdated link to .aspx pages
    /// </summary>
    private void OldPageToNewPageRoutes()
    {
        // Ignore if not Web Form:
        if (!Request.RawUrl.ToLower().Contains(".aspx"))
            return;

        // Clean up any ending slasshes to get to the old web forms file name in switch's last index of "/":
        var removeTrailingSlash = VirtualPathUtility.RemoveTrailingSlash(Request.RawUrl);
        var sFullPath = !string.IsNullOrEmpty(removeTrailingSlash)
            ? removeTrailingSlash.ToLower()
            : Request.RawUrl.ToLower();
        var sSlashPath = sFullPath;

        switch (sSlashPath.Split(Convert.ToChar("/")).Last().ToLower())
        {
            case "default.aspx":
                Response.RedirectToRoute(
                    new RouteValueDictionary
                    {
                        {"Controller", "Home"},
                        {"Action", "Index"}
                    });
                break;
            default:
                // Redirect to 404:
                Response.RedirectToRoute(
                    new RouteValueDictionary
                    {
                        {"Controller", "Error"},
                        {"Action", "NotFound"}
                    });
                break;

        }
    }
0
répondu J. Horn 2016-05-23 15:53:03

Vous pouvez essayer avec ceci:

Contexte.Réponse.Redirect ();

Nt sûr.

-4
répondu Baz1nga 2011-08-16 10:45:57