MVC中如何让未认证用户自动转向另一个URL
今天在用一个实例学习MVC的时候,遇到一个困惑。
因为我用的是IIS6,所以我在配ROUTE的时候,加了这么一个路由:
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Login", id = "" } // Parameter defaults
);
然后在Controller中,应用[Authorize]标签的时候出问题了。
就是如果用户没有登录,而去访问了需要登录才能访问的网页时,系统总是自动给定向到:
Account/Login?ReturnUrl=%2fxxxxx.aspx%2fIndex
正确的应该是定向到:
Account.aspx/Login?ReturnUrl=%2fxxxxx.aspx%2fIndex
基础太差,MVC方面的资料也很少,用FLECTOR看了下代码,怎么也没查到哪里给重定向了。
得回找到这篇文章,让我对MVC的机制理解深刻多了:
ASP.NET MVC Preview 4 分析 - 2. Filter
看到分析中写的这句:
“ControllerActionInvoker 通过 InvokeAuthorizationFilters() 调用 AuthorizeAttribute,然后依次判断登录和角色信息。如果条件不符,则设置取消操作并返回一个 HttpUnauthorizedResult,这个 ActionResult 被 InvokeAciton 所激活,因此才有了 "context.HttpContext.Response.StatusCode = 401" 跳转。”
突然想到,在看代码的时候,对于“HttpUnauthorizedResult.ExecuteResult”,其中有:
context.HttpContext.Response.StatusCode = 0x191;
会不会是微软的MEMBERSHIP机制里面给重定向的呀?
赶紧去WEB.config中看看,果然,找到了:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login"/>
</authentication>
FT~~~~
浙公网安备 33010602011771号