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~~~~

posted on 2008-12-08 18:30  daimon  阅读(809)  评论(0)    收藏  举报

导航