.NET Core StatusCode 200 No AuthenticationScheme Was Specified


本文将从多个方面对.NET Core StatusCode 200 No AuthenticationScheme Was Specified做详细的阐述,并提供解决方案。

一、问题描述

如果你使用.NET Core开发Web应用程序,可能会遇到以下问题:

System.InvalidOperationException: No AuthenticationScheme was specified, and there was no DefaultChallengeScheme found. The default schemes can be set using either AddAuthentication(options => options.DefaultScheme = "scheme") or AddAuthentication("scheme").

如果你遇到这个异常,你可能感到很困惑,不知道发生了什么。接下来,我们将从多个方面阐述这个问题。

二、问题原因

问题出现的原因是,NET Core需要在Middleware管道中添加一个AuthenticationMiddleware来进行身份验证。但是,当我们未添加身份验证中间件,或者未指定默认的身份验证机制,就会引发上述异常。

//在Startup.cs中未添加Authentication Middleware
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}
或者
//在Startup.cs中添加了Authentication Middleware,但没有指定默认的Scheme
public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseAuthentication();

    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

三、解决方案

解决这个问题的方法很简单,只需要在Startup.cs中添加Authentication Middleware,并指定一个默认的AuthenticationScheme即可。

//在Startup.cs中添加Authentication Middleware,并指定一个默认的Scheme
public void ConfigureServices(IServiceCollection services)
{
    services.AddAuthentication("MyScheme")
        .AddScheme<MyAuthenticationSchemeOptions, MyAuthenticationHandler>("MyScheme", null);
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseAuthentication();

    app.UseRouting();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

这里我们添加了一个名为"MyScheme"的AuthenticationScheme,并给它指定了一个自定义的身份验证机制。你可以根据自己的需要自定义不同的身份验证机制。

四、总结

本文从问题描述、原因分析和解决方案三个方面详细讲解了.NET Core StatusCode 200 No AuthenticationScheme Was Specified的问题,希望能够对你解决问题有所帮助。

评论关闭