重定向绝对URL在MVC 4中不起作用

时间:2013-03-28 01:06:38

标签: asp.net-mvc redirect arr

由于某些原因,我必须将来自我的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

2 个答案:

答案 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)

在尝试修复它之后,我没有取得任何成功......所以我决定采用其他方式,通过重定向页面准备某种自定义重定向,以进行JavaScript位置更改。

这是代码......

辅助方法

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>
}

不喜欢这种黑客但这对我有用......