我正在尝试将我的.net内核2.2升级到3.1,但出现以下错误。
不支持构建IWebHostBuilder的此实现。
EndpointRoutingMiddleware与EndpointMiddleware设置的端点匹配,因此必须在EndpointMiddleware.之前将其添加到请求执行管道中。请通过在应用程序启动代码中对"Configure(…("的调用中调用"IApplicationBuilder.UseRouting"来添加EndpointRoutingMiddleware。
我不知道为什么这是在抱怨IWebHostBuilder
。
有人能给我指路吗?
程序.cs
public static void Main(string[] args)
{
IHost webHost = (IHost)BuildWebHost(args);
var runTask = webHost.RunAsync();
runTask.Wait();
return;
}
public static IHostBuilder BuildWebHost(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults
(Web =>
{
Web.UseStartup<Startup>()
.UseConfiguration(Configuration)
.UseSerilog()
.Build();
});
启动.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseHttpContext();
app.UseEndpoints(endpoints =>
endpoints.MapControllers());
}
此
//...
(Web =>
{
Web.UseStartup<Startup>()
.UseConfiguration(Configuration)
.UseSerilog()
.Build(); //<--DON'T DO THIS
});
由于而导致原始问题
//...GenericWebHostBuilder
public IWebHost Build()
{
throw new NotSupportedException($"Building this implementation of {nameof(IWebHostBuilder)} is not supported.");
}
源
代码需要重构为
public static async Task Main(string[] args) {
IHost host = BuildWebHost(args);
await host.RunAsync();
}
public static IHost BuildWebHost(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(Web => {
Web.UseStartup<Startup>()
.UseConfiguration(Configuration)
.UseSerilog();
})
.Build();
为了遵循文件中建议的格式。
如果代码不需要异步,那么也可以工作
public static void Main(string[] args) {
IHost host = BuildWebHost(args);
host.Run();
}