posts - 45,  comments - 35,  trackbacks - 0

网站结构如下:
    /default.aspx
    /login.aspx
    /adminlogin.aspx
    /member/*.aspx
    /admin/*.aspx

需求:访问/member/路径下的页面的请求转向到/login.aspx;
             访问/admin/路径下的页面的请求被转向到/adminlogin.aspx;

一开始,自己假想在/Web.config中作如下配置可以达到目的:

<system.web>
    
<authentication mode="Forms">
        
<forms loginUrl="/Login.aspx" name=".ASPXFORMSAUTH">
        
</forms>
    
</authentication>
</system.web>
<location path="member">
    
<system.web>
        
<authorization>
            
<deny users="?"/>
        
</authorization>
    
</system.web>
</location>
<location path="admin">
    
<system.web>
        
<authentication mode="Forms">
            
<forms loginUrl="/AdminLogin.aspx" name=".ASPXFORMSAUTH">
            
</forms>
        
</authentication>
        
<authorization>
            
<deny users="?"/>
        
</authorization>
    
</system.web>
</location>

 

但很快发现,这样会导致一个运行时错误:

在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的

Google了几下,遇到同样错误的不少,但问题相似的不多。于是临时采用了一种变通的做法(急于解决问题,可能有良好的/更好的解决方案)。两个步骤:

1. 定义/LoginHandler.ashx。在ProcessRequest方法中,



    
if (!HttpContext.Current.User.Identity.IsAuthenticated){
                    
string loginUrl;
                    
string returnUrl = context.Request.Params["returnUrl"];

                    
if(returnUrl.Contains("/Admin/")) {
                        loginUrl 
= "/AdminLogin.aspx";
                    }

                    
else{
                        loginUrl 
= "/Public/Login.aspx";
                    }


                    
if (!string.IsNullOrEmpty(context.Request.Params["returnUrl"])){
                        loginUrl 
= loginUrl + "?returnUrl=" + HttpUtility.UrlEncode(context.Request.Params["returnUrl"]);
                    }

                    context.Response.Redirect(loginUrl);
    }

2. 配置/Web.config,

<system.web>
    
<authentication mode="Forms">
        
<forms loginUrl="/LoginHandler.ashx" name=".ASPXFORMSAUTH">
        
</forms>
    
</authentication>
</system.web>
<location path="LoginHandler.ashx">
    
<system.web>
        
<httpHandlers>
            
<add verb="*" path="LoginHandler.ashx" type="Web.LoginHandler" validate="true" />
        
</httpHandlers>
    
</system.web>
</location>
<location path="member">
    
<system.web>
        
<authorization>
            
<deny users="?"/>
        
</authorization>
    
</system.web>
</location>
<location path="admin">
    
<system.web>
        
<authorization>
            
<deny users="?"/>
        
</authorization>
    
</system.web>
</location>

 

yicone
-The future is worth fighting for.
posted on 2008-05-22 00:32 yicone 阅读(277) 评论(2)  编辑 收藏 所属分类: javascript, ASP.NET, CSS, Web Development

FeedBack:
2008-07-24 11:23 | at [未注册用户]
<authentication mode="Forms">
<forms loginUrl="/LoginHandler.ashx" name=".ASPXFORMSAUTH"> </forms>
</authentication>
<location path="LoginHandler.ashx">
<system.web>
<httpHandlers>
<add verb="*" path="LoginHandler.ashx" type="Web.LoginHandler" validate="true" />
</httpHandlers>
</system.web>
</location>

怎么提示未能加载类型?
  回复  引用    
#2楼 [楼主]
2008-07-25 00:45 | yicone      
@at
LoginHandler是一个类,请确保LoginHandler.ashx中定义了此类,并且该文件能正确编译。
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-05-22 00:36 编辑过
 
 


<2008年5月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

与我联系

搜索

 

常用链接

留言簿

我管理的小组

随笔分类(55)

随笔档案(45)

积分与排名

  • 积分 - 17674
  • 排名 - 2120

最新评论

阅读排行榜

评论排行榜