在ASP.NET MVC项目中,当您使用[Authorize]修饰类或方法并且授权失败时,该站点会自动重定向到登录页面(使用web.config中指定的loginUrl).此外,ASP.NET MVC框架中的某些内容将原始请求的URL作为ReturnUrl参数传递.
什么负责追加这个ReturnUrl?我在项目模板中找不到任何代码.我还看了一下ASP.NET栈源代码中的AuthorizeAttribute 代码,但在那里找不到任何东西.我也尝试在整个ASP.NET堆栈源代码中搜索"returnurl"但找不到任何东西.
我问的原因是我在这个过程中发现了一个错误.您可以通过全新的Internet ASP.NET MVC项目看到这一点.在web.config中将FormsAuth超时设置为1分钟,然后登录.等待一分钟后尝试注销.这将重定向到具有/ account/logoff的ReturnUrl的登录页面,登录后会导致404.我现在使用自己的AuthorizeAttribute解决了这个问题:
public class MyAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
{
string returnUrl = null;
if (filterContext.HttpContext.Request.HttpMethod.Equals("GET", System.StringComparison.CurrentCultureIgnoreCase))
returnUrl = filterContext.HttpContext.Request.RawUrl;
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary()
{
{ "client", filterContext.RouteData.Values[ "client" ] },
{ "controller", "Account" },
{ "action", "Login" },
{ "ReturnUrl", returnUrl }
});
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我想看看源代码,看看我是否可以弄清楚为什么这个bug存在,如果它确实是一个bug.
asp.net-mvc ×1