Asp.net mvc 2 如何从浏览器地址中删除ReturnUrl
现在,在未经授权尝试访问某个操作时,我的ASP.NET MVC应用程序会将用户重定向到登录页面并生成URL,如下所示:Asp.net mvc 2 如何从浏览器地址中删除ReturnUrl,asp.net-mvc-2,Asp.net Mvc 2,现在,在未经授权尝试访问某个操作时,我的ASP.NET MVC应用程序会将用户重定向到登录页面并生成URL,如下所示: >,有没有办法从URL中删除这个字符串,但要保存到某个地方,以便在登录后能够重定向用户? < P>我会考虑实现我自己的AuthorizationFilter并执行重定向。< /P> public class AuthorizationFilter : IFilter { public bool Perform(ExecuteWhen exec, IEngineContext
>,有没有办法从URL中删除这个字符串,但要保存到某个地方,以便在登录后能够重定向用户?
< P>我会考虑实现我自己的AuthorizationFilter并执行重定向。< /P>public class AuthorizationFilter : IFilter
{
public bool Perform(ExecuteWhen exec, IEngineContext context,
IController controller, IControllerContext controllerContext)
{
if (context.CurrentUser.IsInRole("Administrator"))
{
return true;
}
context.Response.Redirect("home", "index");
return false;
}
}
在重定向到登录操作存储url之前
TempData["redirect-url"] = "/requested/page/url";
在登录操作时,读取该值并将其传递给登录视图,并将其放入一个隐藏字段。我将实现一个AuthorizationAttribute
public class MyAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
{
filterContext.HttpContext.Session["ReturnUrl"] = filterContext.HttpContext.Request.UrlReferrer.AbsoluteUri
filterContext.Result = // Your login page controller;
}
}
}
这没有经过测试,但可能会帮助您找到答案
祝您好运,找到解决方案后请提供。我想知道您为什么要这样做。也许您已经厌倦了滥用、过多的URL参数组织,并且您喜欢干净的RESTful URL样式以及使用新的ASP.NET路由特性实现它的优雅方式
然而,在本例中,这正是URL参数的用途。这根本不是坏习惯或坏风格。而且,绝对没有理由对您的登录页面应用SEO巫术。那么,为什么要通过直接要求会话状态(或通过
TempData
间接要求)或任何其他解决方法来降低此过程对用户的可靠性呢?但是重定向是由MVC基础结构自动完成的。我所做的就是在我的操作上设置[Authorize]属性