我有一个ASP.NET核心3.1应用程序。这个应用程序有一个“管理”区域。我已经把这个区域放在它自己的库中,以便在其他应用程序中使用。在我的另一个应用程序中,我现在可以通过访问https://{domain}/_admin访问"Admin“区域。我想重用/与我公司的其他应用程序共享这个库。现在,我公司的其他开发人员已经开发了其他应用程序。因此,我预计_admin路径可能会导致冲突。出于这个原因,我想使路由的这一部分可配置。目前,我有以下内容
appsettings.json
{
"Miscellaneous": {
"AdminRoot":"_admin"
}
}Startup.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);
}
}这种方法使用基于约定的路由。同时,我的管理工具也有自己的REST。因此,我想把基于约定的路由和属性路由结合起来。基本上,我想有像/_admin/api/user-permissions这样的路线。正如这个路径所演示的,如果我在API中添加了一个Route属性,那么Route就会产生一个挑战,因为它是一个配置好的值。
我想,如果我使用~,它将相对于该地区。然而,当我尝试这种方法时,我得到了404。是否有一种动态设置路由部分的方法?例如,我希望能够:
的属性
我找不到方法来完成我想做的事。有办法这样做吗?请注意,我的行政区域要复杂得多。我试着把这个问题和我的实际问题隔离开来。此外,为了学习,我希望有一种可配置的方法。因此,我对诸如将"_admin“更改为像GUID之类的随机值这样的解决方案不感兴趣。谢谢你的帮助!
发布于 2020-07-26 22:03:47
我已经复习了好几个小时了。本质上,由于从配置中提取了一个参数,因此路由需要基于约定的路由。但是,有些名称,比如那些包含破折号的URL友好名称,在C#中是无效的方法名。解决这个问题的方法是使用以下方法:
Route以外的其他属性.在操作上,使用ActionName属性.https://stackoverflow.com/questions/63101607
复制相似问题