c# - 属性路由继承

标签 c# asp.net-core asp.net-core-mvc attributerouting

我之前一直在我的 MVC 应用程序中使用这种方法

[Route("admin")]
public class AdminController : Controller
{

}

[Route("products")]
public class ProductsAdminController :AdminController
{ 
    [Route("list")]
    public IActionResult Index()
    {
        ...
    }
}

Url.RouteUrl() Index 操作返回 /admin/products/list/

现在在 .NET Core 中它忽略基类路由属性并且结果只是 /products/list/ 这是 .NET Core 的新功能吗?是否有任何设置使系统可以组合action + controller + base-controller 路由?

最佳答案

我找不到一种方法来组合 action + controller + base-controller automatically,但是可以这样实现你想要的:

[Route("admin")]
public class AdminController : Controller { }

public class ProductsAdminController : AdminController
{ 
    [Route("products/list")]
    public IActionResult Index()
    {
        ...
    }
}

这种方法最终会生成 /admin/products/list 的 URL,其明显的缺点是 products 是每次操作都需要重复的内容。这可能是一个可以接受的妥协;这由你决定。你可以用一个常量让它变得更好一点,像这样:

private const string RoutePrefix = "products";

[Route(RoutePrefix + "/list")]
public IActionResult Index()
{
    ...
}

它并不漂亮,因为它只是一种解决方法,但如果您不想使用 Chris Pratt's Areas suggestion,则值得考虑.

关于c# - 属性路由继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52335344/

相关文章:

c# - 在 Mono 上运行 ASP.NET 5 的 Ubuntu 上使用 MVC 6 调整图像大小

c# - .Net Core ActionResult<bool> 总是返回 false?

c# - 如何在 ASP.NET Core 中启用 CORS

c# - .NET 委托(delegate)是否用于事件?

C# 委托(delegate)到 Java 的转换

asp.net-core - launchSettings.json中dotnetRunMessages的用途

razor - ASP.NET vNext 上的 Nancy 不加载 Nancy.Viewengines.Razor viewengine

c# - .Net Core HttpClient 摘要身份验证

c# - "Use of unassigned local variable"在 if 语句中与 TryParse 一起使用动态

c# - 如何在 asp.net core 中使用 Fetch api 将数据传递给 Controller