我试图获得一个动作的绝对路径,例如:
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的名称吗?
答案 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.Action
与urlHelper.RouteUrl
的行为不同的原因。但问题不在于nameof
。