您的位置:首页 > 编程语言 > ASP

HOWTO:使ASP.NET网站Forms验证可以指定多个登录页面

2008-05-22 00:32 656 查看
网站结构如下:

/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方法中,



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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: