重定向到 ASP.net 核心中的 url
Posted
技术标签:
【中文标题】重定向到 ASP.net 核心中的 url【英文标题】:redirect to url in ASP.net core 【发布时间】:2019-02-17 21:14:39 【问题描述】:我需要一些帮助我一直在研究一种从 VS 2017 和 asp.net Razor 创建的 program.cs 文件中加载页面的方法,但我无法弄清楚这是如何完成的找到答案,但为了我的一生,我找不到任何可行的方法。 我想要做的是在查找之后我需要使用添加的搜索字符串再次加载页面,我有所有代码进行查找和交叉检查,但我无法让代码再次重定向到页面使用添加的搜索字符串。
Response.Redirect("/machinery?MachineLocation=" + searchstring);
以上代码在 program.cs 或 startup.cs 中不起作用,但在任何 cshtml.cs 文件中都起作用。
我尝试 DI Httpcontext 但这一直返回 null。 任何指针都会很棒。
【问题讨论】:
Response.Redirect
的目的是将发出 HTTP 请求的用户发送到另一个页面。如果您尝试在Program.cs
或Startup.cs
中执行此操作,则没有用户 可重定向,因此没有意义。您应该尝试更详细地描述您想要通过此实现的目标。
添加更多细节为什么要在program.cs或startup.cs中做,你用MVC吗?
目的是主索引页面在顶部“位置”上有标签 我有一个计时器正在运行,我想获取“位置”标签,然后通过重新加载页面移动到下一个标签使用搜索字符串下的 url 中的位置,MVC 将从数据库中加载,但会使用该位置作为搜索字符串。
如果您在控制器中,您可以使用return this.Redirect("myurl")
。还有其他可用的重定向方法。
this.Redirect 起初不起作用,因为它是一个静态类,所以我不得不删除它并创建一个允许 Redirect 运行但它不会转到 URL 的计时器类的实例。
【参考方案1】:
从控制器重定向到完整的 URL 只需通过以下方式完成:
return Redirect(stringFullUrl);
【讨论】:
出于安全原因,请查看@Zeyad 的回答。【参考方案2】:简答,使用:
return LocalRedirect(ReturnUrl);
长答案(出于安全目的很重要):
看起来您正在从用户那里获取 url,如果是这种情况,我不建议单独使用 return Redirect(ReturnUrl);
,因为这会为开放重定向漏洞攻击打开一个通道。基本上,某人可以在某处(例如在广告中)有一个锚元素,该元素使用名为 ReturnUrl 的查询字符串参数将用户引导到您的登录页面,该参数指向他们自己的恶意网站。另一种方法是 ReturnUrl 查询字符串会将用户从您的登录表单重定向到一个看起来与您的完全一样的恶意登录表单,然后他们向用户显示密码不正确,让他们认为他们可能错过了一个字母左右,所以用户尝试再次登录,但这次他们实际上是在将他们的凭据提交给恶意登录表单,而不是你的。然后,黑客将他们的凭据提交到您的网站后,会将他们重定向到您的网站,这样他们就不会发现任何错误,在他们看来,他们输入了错误的密码,但在第二次尝试时,他们成功登录。
因此,使用LocalRedirect()
而不是Redirect()
将首先检查返回url 是否是您自己网站的url,如果不是,则重定向失败并引发异常。避免异常但检查本地 url 的另一种方法是执行以下操作:
if (Url.IsLocalUrl(ReturnUrl))
return Redirect(ReturnUrl);
这将为您提供相同的结果而不会引发异常,因为您在继续重定向之前首先检查 url 是否属于您的 Web 应用程序
【讨论】:
以上是关于重定向到 ASP.net 核心中的 url的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 3.1 图像 URL 错误代码 302 重定向
使用 web.config 中的 httpRedirect 将 asp.net MVC URL 重定向到特定的控制器/操作/参数