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

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

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

<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' 的节是错误的,原因估计是一个应用程序中不能定义2个认证方式

最后解决办法,定义配置文件

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <authentication mode="Forms">
      <forms loginUrl="Handler1.ashx" name=".ASPXFORMSAUTH">
      </forms>
    </authentication>
  </system.web>
  <location path="Handler1.ashx">
    <system.web>
      <httpHandlers>
        <add verb="*" path="Handler1.ashx" type="WebApplication2.Handler1" validate="true" />
      </httpHandlers>
    </system.web>
  </location>
  <location path="member">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
  <location path="admin">
    <system.web>
      <authorization>
        <allow  users="admin"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>
</configuration>

Handler1.ashx为处理跳转的类

变通的解决了问题,但是还有新的问题,如果在member中登录了,再打开admin目录下文件,会跳转到Handler1.ashx判断跳转,但是已经被授权为member用户了,所以就不会实际跳转页面,这样只有直接访问AdminLogin.aspx登录才能授权admin用户

最好的办法还是单独建立一个网站应用程序,或者使用roles分组

示例程序https://files.cnblogs.com/FlyCat/FormsSample.zip

原文地址:https://www.cnblogs.com/FlyCat/p/2624508.html