ASP.NET核心-可配置路由



我有一个ASP.NET Core 3.1应用程序。这个应用程序有一个";管理员";地区我已经把这个区域放在它自己的库中,以便在其他应用程序中使用。在我的另一个应用程序中,我当前可以访问";管理员";访问CCD_ 1。我想与公司的其他应用程序重复使用/共享此库。现在,我公司的其他开发人员已经构建了其他应用程序。因此,我预计_admin路径可能会导致冲突。出于这个原因,我想让路由的这一部分是可配置的。目前,我有以下

appsettings.json

{
"Miscellaneous": {
"AdminRoot":"_admin"
}
}

启动.cs

...
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseEndpoints(endpoints =>
{
var adminRoot = Configuration["Miscellaneous:AdminRoot"];
adminRoot = String.IsNullOrEmpty(adminRoot) ? "_admin" : adminRoot;
endpoints.MapAreaControllerRoute(
name: "Admin",
areaName: "Admin",
pattern: (adminRoot + "/{controller=Home}/{action=Index}/{id?}")
);
}
...
}
...

AdminController.cs

[Area("Admin")]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[Route("~/api/user-permissions")]
public IActionResult LoadUserPermissions()
{
var permissions = GetPermissions();
return Json(permissions);
}
}

这种方法使用[基于约定的路由][1]。同时,我的管理工具也有它自己的REST API。出于这个原因,我想将基于约定的路由与[属性路由][2]混合使用。基本上,我想拥有像/_admin/api/user-permissions这样的路线。正如这个路由所展示的,如果我在API中添加Route属性,_admin就会产生一个挑战,因为它是一个配置值。

我想如果我使用~,它将相对于该区域。然而,当我尝试这种方法时,我得到了404分。有没有一种方法可以动态设置路由的部分?例如,我希望能够:

  • 使用相对于区域或
  • 使用类似[Route("{Configuration["Miscellaneous:AdminRoot"]}/api/user-permissions")]的属性

我没有找到完成我想做的事情的方法。有办法吗?请注意,我的管理区域要复杂得多。我试着把这个问题和我的实际问题隔离开来。此外,为了学习,我希望有一个可配置的方法。出于这个原因,我对改变"_管理员";到像GUID之类的随机值。谢谢你的帮助!

我已经复习了好几个小时了。本质上,由于一个参数是从配置中提取的,因此路由需要基于约定的路由。但是,有些名称,比如那些包含短划线的URL友好名称,在C#中是无效的方法名称。解决方法是使用以下方法:

  • 依赖基于约定的路由
  • 在控制器中使用Route以外的属性。在操作中,使用ActionName属性

最新更新