我目前正在使用ASP.NET Core 2应用程序。我在Startup.cs
Configure方法中配置我的中间件。在此方法 - 配置 - 我也设置我的传统路线。 (我的应用程序中不需要属性路由)。
问题是,一旦应用程序增长,由于代码量很大,配置可能会有点混乱。
现在我试着弄明白,如何从外部类加载传统的路由表。
我当前的路由表看起来非常规则:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
现在我试着弄明白,如何从另一个类加载我的路线:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseStaticFiles();
app.UseMvc(routes =>
{
// .. I want to load my conventional routes from an external class
});
}
我只想到有一种方法可以使用RouteBuilder类创建一个扩展方法,就像在这篇文章中一样:
How to write a middleware as custom router in asp.net core?
因此,在我的Configure方法中,我可以简单地调用类似的东西:
app.UseMyCoolRouter();
我的问题是,我真的不知道如何配置RouteHandler来处理常规请求:
var rh = new RouteHandler(context =>
{
// ... how to configure for regular routes?
});
var rb = new RouteBuilder(app, rh);
rb.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");
app.UseRouter(rb.Build());
当我在没有RouteHandler的情况下创建RouteBuilder实例时:
var rb = new RouteBuilder(app);
我只获得了空引用异常:
"必须在IRouteBuilder上设置默认处理程序。"
您知道如何将我的路由表从另一个类或扩展方法加载到Startup.cs中的Configure方法中吗?
非常感谢!!
答案 0 :(得分:1)
这是我的解决方案:
public class Startup
{
//...
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseDemoRoutes();
}
}
public static class ApplicationExtensions
{
public static IApplicationBuilder UseDemoRoutes(this IApplicationBuilder app)
{
app.UseMvc(routes => new DemoRouter(routes));
return app;
}
}
public class DemoRouter
{
public DemoRouter(IRouteBuilder routes)
{
ConfigureRoutes(routes);
// ConfigureMoreRoutes(routes);
}
private void ConfigureRoutes(IRouteBuilder routes)
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
}
}
首先我创建了一个扩展方法来清理Configure方法,然后我调用一个类来配置我的所有路由。
我不知道这是否是最佳解决方案,但它运作正常......你怎么看? 谢谢:))