由于某些原因,我必须将来自我的MVC 4应用程序的请求重定向到具有位于其他域中的绝对URL的页面。这是我使用的代码:
public ActionResult Test(string url)
{
return Redirect(url);
}
当我在本地计算机上尝试时,一切正常,但是当我将代码发布到生产并尝试让它在那里工作时,我遇到了一些问题...例如,将请求重定向到'{{ 3}}'它会被重定向到'http:// {{myserverdomain.com}} / questions / ask'。因此请求将被重定向到本地路径'questions / ask'而不是绝对URL。
不知道我应该检查什么和哪里。我会很感激任何可能是问题的提示以及在哪里检查它......
以防万一:服务器是Windows Server 2008 R2 Enterprise
更新
URL / HTML编码不是问题的原因。将方法改为
public ActionResult Test()
{
return Redirect("https://stackoverflow.com/questions/ask");
}
会给出相同的结果......它会被重定向到'questions / ask'/怀疑URL重写模块的原因,但不知道如何检查它...
解
这是帮助解决问题的链接:https://stackoverflow.com/questions/ask
答案 0 :(得分:6)
这很奇怪,因为这是正确的方式......
public ActionResult YourAction()
{
// ...
return Redirect("http://www.example.com");
}
您无法直接从ajax响应执行服务器端重定向。但是,您可以使用新网址返回JsonResult并使用javascript执行重定向。
服务器端:
public ActionResult YourAction()
{
// ...
return Json(new {url = "http://www.example.com"});
}
客户端:
$.post("@Url.Action("YourAction")", function(data) {
window.location = data.url;
});
答案 1 :(得分:-1)
这是代码......
辅助方法:
public static void CustomRedirect(this HttpResponseBase response, string url)
{
string customRedirectPage = ConfigurationManager.AppSettings["custom_redirect_page"];
if (string.IsNullOrEmpty(customRedirectPage))
response.Redirect(url);
else
{
byte[] bytesToEncode = Encoding.UTF8.GetBytes(url);
string base64 = Convert.ToBase64String(bytesToEncode);
response.Redirect(string.Format("{0}?url={1}", customRedirectPage, base64));
}
}
<强>的Web.config 强>:
<add key="custom_redirect_page" value="/Redirect/RedirectTo"/>
<强>控制器强>:
public ActionResult RedirectTo(string url)
{
return View((object)System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(url)));
}
HTML :
@section Scripts {
<script type="text/javascript">
$(document).ready(function () {
var url = '@Html.Raw(Model)';
window.location = url;
});
</script>
}
不喜欢这种黑客但这对我有用......