今天在開發簡單的 Web API 時發生一個奇妙的問題,原本應該傳回 401 Unauthorized 卻傳回 404 Not Found ,令我百思不得其解。
聰明的 LLM 直接告訴我們答案,原來是 ASP.Net 遇到未認證的網址時,不管三七二十一先說找不到,再重導到 /Account/Login 。
不囉嗦,直接問 Copilot 吧!
聰明的 LLM 直接告訴我們答案,原來是 ASP.Net 遇到未認證的網址時,不管三七二十一先說找不到,再重導到 /Account/Login 。
所以解法是在 Program.cs ( 舊版是在 Startup.cs) 裡加上以下程式碼:
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.Events.OnRedirectToLogin = context =>
{
if (context.Request.Path.StartsWithSegments("/api") &&
context.Response.StatusCode == StatusCodes.Status200OK)
{
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
}
else
{
context.Response.Redirect(context.RedirectUri);
}
return Task.CompletedTask;
};
});
如此一來,就能得到正確的結果 401
留言