我有一个.NET Core 2.1 Web API,该API在启动时通过IRouteBuilder的MapRoute方法注册自定义路由。这发生在启动的Configure()方法中。
有时这些路由需要更改,我想避免必须重新启动Web api来添加或删除自定义路由。网站运行时是否可以修改路由表?
答案 0 :(得分:0)
对于动态定制路由器,您可以尝试IRouter
。
这是一个简单的演示,用于在运行时从appsettings.json
文件更改路由器。
appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"Router": {
"Controller": "Home",
"Action": "Contact"
}
}
自定义路由器RouterFromAppSettings
public class RouterFromAppSettings : IRouter
{
private readonly IRouter _defaulRouter;
private readonly IConfiguration _config;
public RouterFromAppSettings(IRouter defaulRouter
, IConfiguration config)
{
_defaulRouter = defaulRouter;
_config = config;
}
public async Task RouteAsync(RouteContext context)
{
var controller = _config.GetSection("Router").GetValue<string>("Controller");
var action = _config.GetSection("Router").GetValue<string>("Action");
context.RouteData.Values["controller"] = controller;
context.RouteData.Values["action"] = action;
await _defaulRouter.RouteAsync(context);
}
public VirtualPathData GetVirtualPath(VirtualPathContext context)
{
return _defaulRouter.GetVirtualPath(context);
}
}
注册自定义路线
app.UseMvc(routes =>
{
routes.Routes.Insert(0, new RouterFromAppSettings(routes.DefaultHandler,Configuration));
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
启动该应用程序后,您可以更改appsettings
Router
节点以重定向到其他操作。