【发布时间】:2018-03-30 19:11:25
【问题描述】:
我目前正在开发一个 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?
因此,在我的配置方法中,我可以简单地调用类似的东西:
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 中的配置方法中吗?
非常感谢!!
【问题讨论】:
-
只需将
routes传递给该外部类并让它配置它们 -
这不是我想要的,不过谢谢!我想在这篇文章中创建一个扩展方法:
-
并使用扩展方法配置我所有的常规路由...
-
还是看不出什么问题,然后创建扩展方法并使用它:'routes.UseMyConventionalRoutes()'。
标签: c# asp.net-core