HOWTO:使ASP.NET網站Forms驗證可以指定多個登入頁面

來源:互聯網
上載者:User

網站結構如下:
    /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>

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.