ASP.NET Core MVC属性路由继承

Mic*_*dze 6 c# asp.net-core-mvc asp.net-core

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

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

}

[Route("products")]
public class ProductsAdminController :AdminController
{ 
    [Route("list")]
    public IActionResult Index()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

Url.RouteUrl()指数操作返回/管理/产品/列表/

现在,在.NET Core中,它会忽略基类的路由属性,而结果只是/ products / list /。 这是.NET Core的新功能吗?是否有任何设置,以便系统可以组合操作+控制器+基本控制器路线?

Kir*_*kin 5

我找不到自动组合动作+控制器+基本控制器的 方法,但可以实现您想要的效果,如下所示:

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

public class ProductsAdminController : AdminController
{ 
    [Route("products/list")]
    public IActionResult Index()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

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

private const string RoutePrefix = "products";

[Route(RoutePrefix + "/list")]
public IActionResult Index()
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

它并不漂亮,因为它只是一种解决方法,但如果您不想采用Chris Pratt 的 Areas 建议,则值得考虑。