如何生成从控制器到 razorpages 的链接?

Joh*_*tad 5 c# asp.net-core-mvc asp.net-core razor-pages

我需要创建从 mvc 控制器到 razor 页面的字符串类型链接。Asp.Net 核心 2.2。我使用 IUrlHelper:

int number = 4;
string callbackUrl = Url.Page(
   "/Test/Name",
   pageHandler: null,
   values: new { number },
   protocol: Request.Scheme);
Run Code Online (Sandbox Code Playgroud)

回调 URL 为空。这可以在剃刀页面代码后面工作,但不能从控制器工作。从控制器来看,UrlHelper继承自ControllerBase和razor PageModel,因此有两种不同的实现。但是我怎样才能让控制器 urlhelper 工作,以便我可以创建 razorpages 链接?

(另一个稍微不同的问题是如何以一种好的方式从控制器外部的类库生成这样的链接?)。

pok*_*oke 3

我无法重现你的问题。我在 MVC 控制器中有这段代码,它与生成问题中显示的 \xe2\x80\x99s URL 的代码完全相同:

\n\n
public IActionResult Test()\n{\n    int number = 4;\n    string callbackUrl = Url.Page(\n        "/Test/Name",\n        pageHandler: null,\n        values: new { number },\n        protocol: Request.Scheme);\n\n    return Json(new\n    {\n        callbackUrl\n    });\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

此外,我有一个 Razor 页面,其中/Pages/Test/Name.cshtml包含以下内容:

\n\n
@page "{number}"\nHello @RouteData.Values["number"]!\n
Run Code Online (Sandbox Code Playgroud)\n\n

请注意路由参数的规范,它与控制器内调用number中给出的路由参数相匹配。Url.Page

\n\n

如果我运行该应用程序并打开http://localhost:5000/Home/Test,那么我会得到以下响应,这正是我期望生成的响应:

\n\n
{"callbackUrl":"http://localhost:5000/Test/Name/4"}\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您看到null的是相反的情况,则很可能是路由值number与 Razor 页面中的参数不匹配。在这种情况下,路由找不到匹配的 Razor 页面。

\n\n

如果您有一个未参数化的 Razor 页面(即@page没有参数),则 MVC 操作的响应应如下所示,其中路由值作为查询参数提供:

\n\n
{"callbackUrl":"http://localhost:5000/Test/Name?number=4"}\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

您还可以使用新的LinkGenerator. LinkGenerator 通常会给您提供与 UrlHelper 相同的体验,但不需要环境设置,因此无论您实际身在何处,都可以以相同的方式使用它。

\n