我正在做一个ASP.NET Core6最小API项目.为什么要从较新版本的.NET Core中删除Startup.cs文件?这一变化有什么具体原因吗?

此外,将服务和中间件注册集成到Program.cs文件中,如所提供的代码片段所示,是否被认为是在最新版本的.NET Core中配置应用程序的推荐和更直观的方法?

public class Program
{
    public static async Task Main(string[] args)
    {
        var host = CreateHostBuilder(args).UseDefaultServiceProvider(x => x.ValidateScopes = false).Build();
        await host.RunAsync();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
}

推荐答案

微软已经抛弃了旧的模板与Startup.cs文件,它现在是相当不推荐的做法-如果你有伟大的注册逻辑(DI注册)和配置(配置文件配置应用程序等),你可以考虑在IServiceCollection上使用静态方法或扩展方法来注册你的应用程序服务并应用你的服务.

但新的方法是有一个单一的启动代码位于Program.cs,其中有所有.在这里,您可以得到WebHostBuilder的实例,您可以在其上配置DI(WebHostBuilder.Services).使用Build()方法,您将获得应用程序对象,该对象将运行ASP.NET应用程序(使用Run()方法).使用app对象,您还可以注册中间件和端点.

在这里,我们看到了新的.NET的另一个改进--最少的API,其中您可以使用APP对象直接定义终结点,例如:app.MapGet("/", () => "Hello World");,因此不再需要控制器-同样,只要终结点内的代码很小且简洁,它就可以放在那里.但在更复杂的逻辑中,我建议无论如何都要创建单独的控制器文件.

就是这样--有一些新的方法可以创建您的ASP.NET Web API,但就像所有的东西一样-在哪里使用它以及如何使用它-it depends:)

Csharp相关问答推荐

在2D数组中绘制椭圆

如何将两个查询结果组合在C#ASP.NET MHC控制器中

在包含空项的列表上使用具有断言T的摘要表

将修剪声明放入LINQ中

始终保留数组中的最后N个值,丢弃最老的

如果属性名为xyz,我需要使用System.Text.Json修改字符串类型的值""<>

Azure DEVOPS找不到定制的Nuget包

Azure Redis缓存与Entra ID身份验证

方法从数据表中只 Select 一个条件?

当用户右键单击文本框并单击粘贴时触发什么事件?

如何使用EF Core和.NET 8来upsert到具有多对多关系的表?

如何在C#中创建VS代码中的控制台应用程序时自动生成Main方法

EF核心区分大小写的主键

如何管理Azure认证客户端响应和证书 fingerprint

异步任务调用程序集

为什么Azure函数(独立工作进程)索引失败?使用Azure App配置的CosmosDbTrigger绑定失败,未解析为值

如何使用类似于[SELECT*FROM&Q;&Q;WHERE&Q;]SQL查询的System.Data.Entity创建查询?

从HTML元素获取 colored颜色

WPF如何获取有关从一个视图模型更改另一个视图模型的信息

try 访问字典中的模拟对象时引发KeyNotFoundException