我有一个.Net核心Web应用程序,该应用程序托管在装有.Net核心的Windows Server 2016环境中。
我将过滤器包含在Startup.cs的ConfigureServices方法中,发布到服务器IIS,运行该应用程序后,发现Http 500错误。
这是我的ConfigureServices和Configure方法中的代码
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
services.AddDbContext<LocalAppDBContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddSingleton<IConfiguration>(Configuration);
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddAuthentication(IISDefaults.AuthenticationScheme);
// Global filter
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
config.Filters.Add(new AuthorizeFilter(policy));
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseBrowserLink();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
app.UseStatusCodePagesWithRedirects("/Error/StatusCode/{0}");
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Requests}/{action=Index}/{id?}");
});
}
在日志文件中,我在所有堆栈输出的顶部看到了这一点:
失败:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware [0]
发生未处理的异常:未指定authenticationScheme,也未找到DefaultChallengeScheme。
System.InvalidOperationException:未指定authenticationScheme,也未找到DefaultChallengeScheme。
经过一番谷歌搜索后,似乎是因为未定义身份验证方案。
但是在我的services.AddMvc行上方,我有AddAuthentication,它使用IISDefaults身份验证方案:
services.AddAuthentication(IISDefaults.AuthenticationScheme);
您知道是什么原因导致此500个内部服务器错误吗?
答案 0 :(得分:1)
我的问题中的代码是正确的。
这是一个愚蠢的错误,当我尝试使用域帐户来验证用户访问权限时,我没有启用Windows身份验证。默认情况下,使用匿名身份验证。