2016-10-24 2 views
1

Я пытаюсь получить абсолютный путь действия, например:Получение маршрута с использованием nameof действий

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 - null. Зачем?

Могу ли я использовать имяof в RouteUrl как имя маршрута?

ответ

1

Вопрос не с 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.

+0

Возможно, я ошибаюсь, но не могу получить абсолютный маршрут, используя имяof в Action или RouteUrl, используя nameof вместо указания значений Action и Controller. Я, хотя nameof, будет использоваться таким образом. –

+0

Могу сказать, что 'urlHelper.RouteUrl' не работает, независимо от того, используете ли вы' nameof' или нет. Проблема не 'nameof', а ваше ожидание функции' urlHelper.RouteUrl'. –

Смежные вопросы