一般信息:
我正在开发一个ASP.NET MVC 5应用程序,它可以发送电子邮件并跟踪每封电子邮件中的链接点击。当某个用户跟踪链接时,他们使用某些查询参数对我的Web服务器执行GET查询。同时,我的应用程序保存有关点击的信息,并将用户重定向到初始(目标)站点。
言归正传:
邮件中的链接可能是任意的(例如 http://www.google.com , // google.com , www.google.com )甚至无效(例如 ab // cd )。我的应用程序不关心url的字符串值(即使它像 \ asdf // sadg:),只是将它们直接粘贴到地址栏。
为此,我尝试使用Redirect
和RedirectPermanent
方法以及UriBuilder
类。如果在没有方案的情况下指定了网址,则Redirect
和RedirectPermanent
可以组合地址并尝试重定向到本地路径。如果需要,UriBuilder
设法添加一个方案,但是当url无效时它会抛出异常。顺便说一句,JavaScript location.replace
与c#Redirect
具有相同的行为。
问题:
如何在没有任何验证的情况下从ASP.NET MVC控制器重定向到任意URL并重定向到本地路径?
答案 0 :(得分:0)
您应该能够使用Redirect()方法并传入一个字符串。只要您将其作为字符串传递,我就不会认为它会尝试验证给定的URI。
经过测试和"工作" (浏览器收到正确的位置标题):
return Redirect("\asdf//sadg:");
如果你想这样做"手动",你可以做这样的事情来自己执行重定向:
Response.AddHeader("Location","whateverurl");
HttpContext.Response.StatusCode = (int)HttpStatusCode.Moved;
return new ContentResult() { Content = String.Empty };