首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绝对URL重定向在MVC 4中不起作用

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

Stack Overflow用户
提问于 2013-03-28 01:06:38
回答 2查看 13K关注 0票数 3

出于某些原因,我不得不将请求从MVC 4应用程序重定向到具有位于其他域中的绝对URL的页面。下面是我使用的代码:

代码语言:javascript
复制
public ActionResult Test(string url)
{
    return Redirect(url);
}

当我在本地机器上试用它时,一切都很好,但是当我将代码发布到产品中并试图在那里工作时,我会遇到一些问题.例如,要将请求重定向到“https://stackoverflow.com/questions/ask”,它将被重定向到“http://{{myserverdomain.com}}/questions/ask'”。因此,请求将被重定向到本地路径‘质询/询问’,而不是绝对URL。

不知道我该去哪里查。我很想知道什么可能是问题所在,在哪里检查.

以防万一:服务器是Windows 2008 R2企业

更新

URL/HTML编码不是问题的原因。将方法更改为

代码语言:javascript
复制
public ActionResult Test()
{
    return Redirect("https://stackoverflow.com/questions/ask");
}

会给出同样的结果。它将被重定向到‘质询/问’/怀疑使用URL重写模块的原因,但还不知道如何检查它.

溶液

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-04 16:23:42

经过一些尝试,我没有取得任何成功.所以我决定换一种方式,准备通过重定向页面进行某种定制的重定向,从而改变JavaScript的位置。

这是密码..。

Helper方法

代码语言: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

代码语言:javascript
复制
<add key="custom_redirect_page" value="/Redirect/RedirectTo"/>

控制器

代码语言:javascript
复制
    public ActionResult RedirectTo(string url)
    {
        return View((object)System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(url)));
    }

代码语言:javascript
复制
@section Scripts {
    <script type="text/javascript">
        $(document).ready(function () {
            var url = '@Html.Raw(Model)';
            window.location = url;
        });
    </script>
}

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

票数 -1
EN

Stack Overflow用户

发布于 2013-03-28 01:27:03

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

代码语言:javascript
复制
public ActionResult YourAction()
{
    // ...
    return Redirect("http://www.example.com");
}

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

服务器端:

代码语言:javascript
复制
public ActionResult YourAction()
{
    // ...
    return Json(new {url = "http://www.example.com"});
}

客户端:

代码语言:javascript
复制
$.post("@Url.Action("YourAction")", function(data) {
    window.location = data.url;
});
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15672491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档