В старом Web API 2 мы использовали для настройки маршрутизации в WebApi.config так:Как я могу получить больше контроля над моей маршрутизацией контроллера API в MVC Core?
Map(routes, "MyNamedRoute", "{controller}/custom/preview",
new {action = "PreviewSomthing"});
Так маршрут будет идти к контроллеру, указанный в первом сегменте URL, а затем к действию PreviewSomething или без действия по умолчанию, а затем имя метода, соответствующее HTTP-глаголу, или метод с атрибутом, соответствующим HTTP-глаголу запроса.
Сейчас в ASP.Net MVC Ядра, все, кажется, использует:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
для простых маршрутов типа MVC, смешанных с маршрутизацией атрибут для контроллеров Web API.
Является ли это сейчас лучшей практикой? Я бы предпочел больше контроля, фактически определяющего мои маршруты. Похоже, они были бы более проверяемыми. Если до сих пор нет объекта сбора маршрутов, мы все равно можем получить доступ к тестовым маршрутам.
В этой статье: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing есть раздел «Использование промежуточного программного обеспечения маршрутизации».
Понадобится:
services.AddRouting()
в конфиг startup.cs
Вот пример они дают:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
var trackPackageRouteHandler = new RouteHandler(context =>
{
var routeValues = context.GetRouteData().Values;
return context.Response.WriteAsync(
$"Hello! Route values: {string.Join(", ", routeValues)}");
});
var routeBuilder = new RouteBuilder(app, trackPackageRouteHandler);
routeBuilder.MapRoute(
"Track Package Route",
"package/{operation:regex(^track|create|detonate$)}/{id:int}");
routeBuilder.MapGet("hello/{name}", context =>
{
var name = context.GetRouteValue("name");
// This is the route handler when HTTP GET "hello/<anything>" matches
// To match HTTP GET "hello/<anything>/<anything>,
// use routeBuilder.MapGet("hello/{*name}"
return context.Response.WriteAsync($"Hi, {name}!");
});
var routes = routeBuilder.Build();
app.UseRouter(routes);
}
Этот пример действительно сложным и абстрактным, чтобы быть полезным меня. Но предполагается поддерживать такие методы, как: MapGet и MapPost
ли атрибут маршрутизации более общепринятый способ в настоящее время? Это самый стандартный способ?