在旧的Web API 2,我们用来建立路由在WebApi.config这样的:如何获得对MVC Core中的API控制器路由的更多控制?
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?}");
});
与属性路由的Web API控制器混合纯MVC型路线。
现在认为这是最佳做法吗? 我更喜欢实际定义我的路线的更多控制。看起来他们会更加可测试。除非仍然有某个路由集合对象,否则我们仍然可以访问测试路由。
本文内容: 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
是属性路由现在更易于接受的方式? 它是最标准的方式吗?