使用MVC的Redirect
方法时遇到问题。我在一个简单的IIS代理后面运行我的MVC4 Web应用程序。 IIS代理使用一个简单的重写规则,以便可以在名为“旧版”的文件夹下访问该站点。规则如下:
proxy.host.com/legacy/{whatever} => host.com:81/{whatever}
但是在某些情况下,我需要重定向到完全不适用代理规则的域中的域。我创建了一个简单的端点,该端点可以重定向到外部域:
public class ApplicationController
{
[AllowAnonymous]
public ActionResult TestRedirect(string returnUrl)
{
return this.Redirect("http://AnotherDomain.com/SomeRoute");
}
}
如果我这样调用此端点:
http://proxy.host.com/legacy/Application/TestRedirect
并使用Fiddler之类的工具捕获流量,我看到调用此终结点的结果是这样的:
HTTP/1.1 302 Found
Location: proxy.host.com/Application/SomeRoute
//... Other data omitted for simplicity
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://anotherDomain.com/Application/SomeRoute">here</a>.</h2>
</body></html>
如您所见,响应的主体具有预期的域(已传递给Redirect
方法,但Location标头不包含相同的域。我希望location标头包含该域传递到Redirect()
中。也就是说,我希望响应看起来像这样:
HTTP/1.1 302 Found
Location: http://anotherDomain.com/Application/SomeRoute
//... Other data omitted for simplicity
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="http://anotherDomain.com/Application/SomeRoute">here</a>.</h2>
</body></html>
我应该补充一点,如果我关闭代理或通过调用host.com:81/Application/TestRedirect
绕过它,则该方法将按预期工作并且响应Location标头与响应主体匹配。
有人可以解释一下为什么我在响应中得到的Location标头的意外结果与响应正文不同吗?如何使重定向按预期工作?
谢谢。