使用nameof获取行动路线

时间:2016-10-24 10:58:06

标签: asp.net-core

我试图获得一个动作的绝对路径,例如:

public class HomeController : Controller {

  [HttpGet]
  public async Task<IActionResult> Index() {
    return View();
  }

}

所以我尝试了以下选项:

var r1 = urlHelper.Action("Index", "Home", null, Request.Scheme);

var r2 = urlHelper.RouteUrl(nameof(HomeController.Index), null, Request.Scheme);

我在 r1 中获得了正确的绝对路线,但 r2 为空。为什么呢?

我不能使用RouteUrl中的nameof作为Route的名称吗?

1 个答案:

答案 0 :(得分:2)

问题不在于nameof operator,而在于你在这里调用两个不同的功能。将nameof作为参数的HomeController.Index运算符等效于字符串"Index"

例如:

var r1 = urlHelper.Action("Index", "Home", null, Request.Scheme);
var r2 = urlHelper.RouteUrl("Index", null, Request.Scheme);

与此相同:

var r1 = urlHelper.Action(nameof(HomeController.Index), "Home", null, Request.Scheme);
var r2 = urlHelper.RouteUrl(nameof(HomeController.Index), null, Request.Scheme);
  

nameof运算符用于获取变量,类型或成员的简单(非限定)字符串名称

您真正需要弄清楚的是urlHelper.ActionurlHelper.RouteUrl的行为不同的原因。但问题不在于nameof