Я не могу воспроизвести вашу проблему.У меня есть этот код внутри контроллера MVC, который является точно таким же кодом для генерации URL, который показан в вопросе:
public IActionResult Test()
{
int number = 4;
string callbackUrl = Url.Page(
"/Test/Name",
pageHandler: null,
values: new { number },
protocol: Request.Scheme);
return Json(new
{
callbackUrl
});
}
Кроме того, у меня есть страница Razor на /Pages/Test/Name.cshtml
со следующимсодержание:
@page "{number}"
Hello @RouteData.Values["number"]!
Обратите внимание на спецификацию параметра маршрута number
, который соответствует параметру маршрута, указанному в вызове Url.Page
внутри контроллера.
Если я запускаю это приложение иоткройте http://localhost:5000/Home/Test
, тогда я получу следующий ответ, который именно то, что я ожидаю получить:
{"callbackUrl":"http://localhost:5000/Test/Name/4"}
Если вы видите null
, скорее всего, значение маршрута number
делаетне соответствует параметру на вашей странице Razor.В этом случае при маршрутизации не будет найдена соответствующая страница Razor.
Если у вас есть непараметризованная страница Razor (т. Е. Просто @page
без аргумента), ответ от действия MVC должен быть следующим, гдезначение маршрута предоставляется в качестве аргумента запроса:
{"callbackUrl":"http://localhost:5000/Test/Name?number=4"}
Вместо UrlHelper, который зависит от значений окружения и, как таковой, лучше всего используется в действиях контроллера или представлениях Razor, вы также можете использоватьновый LinkGenerator
.LinkGenerator, как правило, дает вам тот же опыт, что и UrlHelper, но не требует настройки окружения, поэтому его можно использовать одинаково, независимо от того, где вы на самом деле.