重定向到外部URI,即使它无效

时间:2016-08-23 23:23:12

标签: c# asp.net-mvc

一般信息:

我正在开发一个ASP.NET MVC 5应用程序,它可以发送电子邮件并跟踪每封电子邮件中的链接点击。当某个用户跟踪链接时,他们使用某些查询参数对我的Web服务器执行GET查询。同时,我的应用程序保存有关点击的信息,并将用户重定向到初始(目标)站点。

言归正传:

邮件中的链接可能是任意的(例如 http://www.google.com // google.com www.google.com )甚至无效(例如 ab // cd )。我的应用程序不关心url的字符串值(即使它像 \ asdf // sadg:),只是将它们直接粘贴到地址栏。

为此,我尝试使用RedirectRedirectPermanent方法以及UriBuilder类。如果在没有方案的情况下指定了网址,则RedirectRedirectPermanent可以组合地址并尝试重定向到本地路径。如果需要,UriBuilder设法添加一个方案,但是当url无效时它会抛出异常。顺便说一句,JavaScript location.replace与c#Redirect具有相同的行为。

问题:

如何在没有任何验证的情况下从ASP.NET MVC控制器重定向到任意URL并重定向到本地路径?

1 个答案:

答案 0 :(得分:0)

您应该能够使用Redirect()方法并传入一个字符串。只要您将其作为字符串传递,我就不会认为它会尝试验证给定的URI。

经过测试和"工作" (浏览器收到正确的位置标题):

return Redirect("\asdf//sadg:");

如果你想这样做"手动",你可以做这样的事情来自己执行重定向:

    Response.AddHeader("Location","whateverurl");           
    HttpContext.Response.StatusCode = (int)HttpStatusCode.Moved;
    return new ContentResult() { Content = String.Empty };