2013-09-28 107 views
5

參考:Microsoft.AspNet.FriendlyUrlsAsp.net 4.0 Forms身份驗證和FriendlyUrls

我正在使用窗體身份驗證和FriendlyUrls。我有一個名爲「Account」的子目錄,其中包含文件「Register.aspx」。我需要授予文件「Register.aspx」的權限,並通過web.config拒絕所有其他文件的權限。我嘗試了各種設置,但Register.aspx文件未獲得許可。

的web.config

<system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="Account/login" name="LOGIN" defaultUrl="Account/Logged" timeout="15" cookieless="UseDeviceProfile" protection="All" slidingExpiration="true" /> 
    </authentication> 
    </system.web> 

    <location path="Account"> 
    <system.web> 
     <authorization> 
     <deny users="?" /> 
     </authorization> 
    </system.web> 
    </location> 

    <location path="Account/Register"> 
    <system.web> 
     <authorization> 
     <allow users="?" /> 
     </authorization> 
    </system.web> 

回答

1

我曾與FriendlyURLs和Forms身份驗證(OWIN雖然)同樣的問題。嘗試訪問授權內容頁面試圖重定向到/帳戶/登錄?returnUrl =%2FAccount%2FLogin,只有重定向卡在一個無限循環,直到查詢字符串超過最大長度!我唯一能找到的方法是將登錄頁面(或允許匿名訪問的任何其他頁面)放在它自己的文件夾中,並授予對該文件夾的訪問權限,而不是頁面本身。所以,如果我有/帳號/登錄,我想補充:

<system.web>  
    <authorization> 
     <deny users="?" /> 
    </authorization> 
    </system.web> 

    <location path="Account"> 
    <system.web> 
     <authorization> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    </location> 

我看到您已經添加了/帳戶路徑的規則,但將其設置爲拒絕。不知道你是否已經改變了允許在本地或不...

儘管我使用MS OWIN的窗體認證庫,而不是默認的ASP.Net內置的一個,我預計上述將適用於標準一個也是如此。僅供參考,我的表單驗證身份驗證設置看起來像這樣:

public void ConfigureAuth(IAppBuilder app) 
    { 
     app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      AuthenticationMode = AuthenticationMode.Active, 
      LoginPath = new PathString("/Account/Login"), 
      LogoutPath = new PathString("/Account/Logout"), 
      ExpireTimeSpan = TimeSpan.FromHours(12), 
      SlidingExpiration = true, 
      CookieName = "MyCookieName.Session", 
      CookieSecure = CookieSecureOption.SameAsRequest, 
      // Required for AJAX calls 
      CookieHttpOnly = false 
     }); 
    }