重定向到ASP.net核心中的url

时间:2018-09-13 07:24:52

标签: c# razor asp.net-core

我需要一些帮助,我一直在设法从VS 2017和asp.net Razor创建的program.cs文件中加载页面,但是我无法确定如何完成此工作,我在网上已经看到了找到答案,但对于我的一生,我找不到任何可行的方法。 我要做的是在查找后需要使用添加的搜索字符串再次加载页面,我拥有所有代码来进行查找和交叉检查,但是我无法使代码再次重定向到页面加上添加的搜索字符串。

+---------------+-------------------+-----+-----------------+
|             id|                 dt|speed|            stats|
+---------------+-------------------+-----+-----------------+
|358899055773504|2018-07-31 18:58:34|    0|[9,0,-1,22,0,1,0]|
|358899055773505|2018-07-31 18:54:23|    4| [9,0,0,22,1,1,1]|
+---------------+-------------------+-----+-----------------+

上面的代码不适用于program.cs或startup.cs,但可以用于任何cshtml.cs文件。

我尝试DI Httpcontext,但这一直返回null。 任何指针都很棒。

2 个答案:

答案 0 :(得分:5)

从控制器重定向到完整URL只需执行以下操作:

return Redirect(stringFullUrl);

答案 1 :(得分:4)

简短答案,使用:

return LocalRedirect(ReturnUrl);

长答案(出于安全目的很重要):

好像您正在从用户那里获取URL,如果这样,我建议您不要单独使用return Redirect(ReturnUrl);,因为这会为“打开重定向漏洞攻击”打开一个通道。基本上,某人可以在某处(例如在广告中)放置锚点元素,该锚点元素使用名为ReturnUrl的查询字符串参数将用户定向到您的登录页面,该参数指向他们自己的恶意网站。另一种方法是,ReturnUrl查询字符串会将用户从您的登录表单重定向到与您完全一样的恶意登录表单,然后他们向用户显示密码不正确,使他们认为自己可能错过了一个字母左右,因此用户尝试再次登录,但是这次他们实际上是将其凭据提交给恶意的登录表单,而不是您的。黑客在将其凭据提交到您的网站后会将其重定向到您的网站,以使他们不会发现任何错误,在他们看来,他们输入了错误的密码,但是在第二次尝试中,他们成功登录了。 因此,使用LocalRedirect()而不是Redirect()将首先检查返回网址是否是您自己网站的网址,如果不是,则重定向失败并引发异常。避免异常但仍检查本地URL的另一种方法是执行以下操作:

if (Url.IsLocalUrl(ReturnUrl)) {
    return Redirect(ReturnUrl);
}

这将为您提供相同的结果而不会引发异常,因为在继续重定向之前,您首先要检查url是否属于您的Web应用程序