`MapControllerRoute`、`MapDefaultControllerRoute` 和 `MapControllers` 之间的区别?

Difference between `MapControllerRoute`, `MapDefaultControllerRoute`, and `MapControllers`?

我正在将 .NET Core 2.1 升级到 .NET Core 3.0,我发现 here 我必须使用 UseEndpoints。但是,在某些页面上,我看到它带有 MapControllerRouteMapDefaultControllerRouteMapControllers

我查看了documentation,发现MapDefaultControllerRouteMapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}")基本一样。但是我不明白 MapControllers 的区别。最后一个函数实际上做了什么?文档说:"Adds endpoints for controller actions to the IEndpointRouteBuilder without specifying any routes.",但我不明白,抱歉。

MapControllers 用于映射控制器上可能存在的任何属性,例如 [Route][HttpGet]

来自微软: 将控制器操作的端点添加到 Microsoft.AspNetCore.Routing.IEndpointRouteBuilder 没有指定任何路线。 解释: 这表示它将 url 映射到控制器和操作,您需要指定自己的路线

MapControllerRoute

使用常规路由(最常用于 MVC 应用程序),并设置 URL 路由模式。所以你会在 tutorials/documentation 中看到这样的东西:

endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

您可以将此设置为您想要的任何值(在合理范围内),您的路线将遵循此模式。上面的模式基本上是 {{root_url}}/{{name_of_controller}}/{{name_of_action}}/{{optional_id}} ,如果没有提供控制器和动作,它默认为 home/index.

MapDefaultControllerRoute 这是上面的,但是它简化了我上面显示的默认模式的配置。

地图控制器 这不会对路由做出任何假设,并且将依赖于用户进行属性路由(最常用于 WebAPI 控制器)以将请求发送到正确的位置。

N.B。完全可以在侧边属性路由中使用 MapControllerRoute(并通过代理 MapDefaultControllerRoute)。如果用户不提供属性,它将使用定义的默认模式。