3

由于某些原因,我必须将请求从我的 MVC 4 应用程序重定向到具有位于另一个域中的绝对 URL 的页面。这是我使用的代码:

public ActionResult Test(string url)
{
    return Redirect(url);
}

当我在本地机器上尝试时一切正常,但是当我将代码发布到生产环境并尝试让它在那里工作时,我遇到了一些问题......例如,将请求重定向到' https://stackoverflow .com/questions/ask ' 它将被重定向到 '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");
}

将给出相同的结果...它将被重定向到“问题/询问”/怀疑​​是 URL 重写模块的原因,但还不知道如何检查它...

解决方案

这是帮助解决问题的链接:http ://forums.iis.net/t/1171047.aspx

4

2 回答 2

6

这很奇怪,因为它是正确的方式......

public ActionResult YourAction()
{
    // ...
    return Redirect("http://www.example.com");
}

您不能直接从 ajax 响应执行服务器端重定向。但是,您可以返回带有新 url 的 JsonResult 并使用 javascript 执行重定向。

服务器端 :

public ActionResult YourAction()
{
    // ...
    return Json(new {url = "http://www.example.com"});
}

客户端:

$.post("@Url.Action("YourAction")", function(data) {
    window.location = data.url;
});
于 2013-03-28T01:27:03.173 回答
-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));
    }
}

网络配置

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

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

于 2013-06-04T16:23:42.953 回答