gpt4 book ai didi

c# - 如何生成从 Controller 到 razorpages 的链接?

转载 作者:行者123 更新时间:2023-12-04 15:48:47 26 4
gpt4 key购买 nike

我需要从我的 mvc Controller 到 Razor 页面创建一个字符串类型的链接。
Asp.Net 核心 2.2。
我使用 IUrlHelper:

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

callbackUrl 为空。这适用于后面的 Razor 页面代码,但不适用于 Controller 。 UrlHelper 从 Controller 继承自 ControllerBase 和 razor PageModel,因此有两种不同的实现。但是我怎样才能让 Controller urlhelper 工作,以便我可以创建一个 razorpages 链接?

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

最佳答案

我无法重现您的问题。我在 MVC Controller 中有此代码,它与生成问题中显示的 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
});
}

另外,我在 /Pages/Test/Name.cshtml 上有一个 Razor 页面。内容如下:
@page "{number}"
Hello @RouteData.Values["number"]!

注意路由参数 number的规范, 匹配 Url.Page 中给出的路由参数在 Controller 内调用。

如果我运行该应用程序并打开 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,它取决于环境值,因此最好在 Controller 操作或 Razor View 中使用,您还可以使用新的 LinkGenerator . LinkGenerator 通常会为您提供与 UrlHelper 相同的体验,但不需要环境设置,因此无论您身在何处,都可以以相同的方式使用它。

关于c# - 如何生成从 Controller 到 razorpages 的链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54734370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com