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
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");
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 .
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"));
}
}
essaye ceci:
HttpContext.Current.Response.Redirect("...");
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.
Response.RedirectToRoute(
new RouteValueDictionary {
{ "Controller", "Home" },
{ "Action", "TimeoutRedirect" }} );
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;
}
}
Vous pouvez essayer avec ceci:
Contexte.Réponse.Redirect ();
Nt sûr.