当ASP.NET Core Identity返回404而不是401时,可能是因为身份验证配置不正确。以下是一个解决方法示例:
首先,确保在Startup.cs文件的ConfigureServices方法中添加了身份验证服务:
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = IdentityConstants.ApplicationScheme;
options.DefaultChallengeScheme = IdentityConstants.ApplicationScheme;
options.DefaultSignInScheme = IdentityConstants.ExternalScheme;
}).AddIdentityCookies();
services.AddIdentity()
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();
然后,确保在Startup.cs文件的Configure方法中添加身份验证中间件:
app.UseAuthentication();
接下来,确保在需要进行身份验证的Controller或Action上添加[Authorize]属性:
[Authorize]
public class HomeController : Controller
{
// ...
}
如果你只想对特定的Controller或Action进行身份验证,可以将[Authorize]属性添加到具体的Controller或Action上。
如果上述代码示例仍然返回404而不是401,那么可能是因为身份验证中间件的顺序不正确。请确保身份验证中间件是在其他中间件之前添加的。例如,以下是一个正确的身份验证中间件的顺序示例:
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
请注意,如果你使用了MVC或API控制器,并且在ConfigureServices方法中启用了Endpoints路由,则需要确保在调用app.UseEndpoints方法之前添加身份验证中间件。
希望以上解决方法能够帮助你解决问题。如果问题仍然存在,请检查其他可能的配置错误,例如路由配置或身份验证策略等。