我可以通过HttpGet设置动作别名来包含同名的css文件吗?

时间:2018-02-24 09:53:40

标签: c# asp.net asp.net-mvc asp.net-core-mvc asp.net-core-2.0

我正在尝试根据控制器和.css

中的操作包含_Layout.cshtml个文件
@{
    var actionCssName = 
        $"{ViewContext.RouteData.Values["Controller"]}." +
        $"{ViewContext.RouteData.Values["Action"]}.css";
}
<link href="/css/@actionCssName" rel="Stylesheet" type="text/css" />

引用.css文件,其名称为:css/Controller.Action.css

同时,我的控制器中的操作不使用默认名称,而是使用HttpGet进行修饰:

[HttpGet("report")]
public IActionResult GetReport()
{
    return View("Report", new ReportBody { ... });
}

不幸ViewContext.RouteData.Values["Action"]返回的名称GetReport而不是report,与.css文件不匹配,因为最终名称为css/TestController.GetReport.css。如果可以获取动作的别名,我宁愿不重命名。

或者我这样做完全错了,还有另一种方法可以实际运作吗?

1 个答案:

答案 0 :(得分:4)

您必须将方法名称从GetReport更改为Report

[HttpGet("report")]
public IActionResult Report()
{
    return View("Report", new ReportBody { ... });
}

或者您可以使用ActionName属性

[HttpGet("report")]
[ActionName("Report")]
public IActionResult GetReport()
{
    return View("Report", new ReportBody { ... });
}