使用 Owin Startup 時遇上的問題

情境

使用 Owin Startup Class 做到如果沒有經過驗證就會導到特定的頁面功能。

測試的時候卻遇到找不到「 /login.aspx 」的現象。




觀察

先檢查「Startup.cs」、「Startup.Auth.cs」檢查是否有放「OwinStartup Attribute

Startup.cs
1
2
3
4
5
6
7
8
[assembly: OwinStartup(typeof(Login.Startup))]
namespace Login {
public partial class Startup {
public void Configuration(IAppBuilder app) {
ConfigureAuth(app);
}
}
}
Startup.Auth.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
public partial class Startup {
public void ConfigureAuth(IAppBuilder app) {
app.UseCookieAuthentication(new CookieAuthenticationOptions {
.
<省略>
.
LoginPath = new PathString("/Account/Login"), //要導到的頁面是有放的!!!
.
<省略>
.
});
}
}

看起來「Startup.cs」、「Startup.Auth.cs」都沒問題! 所以到底是什麼原因讓它一直在尋找「 /login.aspx

最後,在 MVC5 - ASP.NET Identity登录原理 - Claims-based认证和OWIN 看到一段文字。

… VS还自动帮我们移除了FormsAuthenticationModule …

找了一下資料,在這篇 Forms Authentication Configuration and Advanced Topics (C#) 說明了:

loginUrl - The URL of the login page. The default value is login.aspx.

看起來是找到原因了!

解決

在 「 Web.config 」把「 FormsAuthenticationModule 」移掉!

Web.config
1
2
3
4
5
6
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
<remove name="FormsAuthenticationModule" />
</modules>
</system.webServer>

延伸閱讀