从ASP.NET MVC控制器重定向到外部URI

185

我试图从操作方法重定向到外部URL,但无法使其正常工作。 有人可以帮我解决一下错误吗?

public void ID(string id)
    {
        string url = string.Empty;
        switch (id)
        {
            case "DB2FCB11-579F-4DA2-A68C-A6495B9BAAB5":

                url = "http://www.somesite.com";
                break;
        }
        Response.Redirect(url, true);
    }

谢谢, Chris


1
你的错误是什么?或者症状是什么?这个问题有任何解决方案吗? - Paul Sasik
4个回答

376
如果你正在谈论 ASP.NET MVC,那么你应该拥有一个控制器方法,返回以下内容:
return Redirect("http://www.google.com");
否则,我们需要更多关于重定向错误的信息。我建议逐步检查确保URL不为空。

5
你可以选择使用以下代码:return new RedirectResult("yourURL", true); 这与之前的代码几乎相同,但它在末尾提供了一个参数,用于指示是否进行永久重定向(HTTP 301)还是其他类型的重定向(例如307)。 - ctb
@Mr.Pichler 最有可能是302,但您可以使用Fiddler进行检查。 - Yuriy Faktorovich
2
Redirect(rul) 是 302,而 RedirectPermanent(url) 是 301。 查看:https://dev59.com/2GMm5IYBdhLWcg3wi_m0 - TNT
有没有想过如何让它与本地HTML文件一起工作? 不起作用:
return Redirect("C:/Users/Me/Documents/test.html");
- Steve Eggering
2
@SteveEggering 请查看 https://dev59.com/Zmgv5IYBdhLWcg3wHdR_ - Yuriy Faktorovich
在Azure上托管API怎么样? - B. Hulshof

16

使用JavaScript

 public ActionResult Index()
 {
    return Content("<script>window.location = 'http://www.example.com';</script>");
 }

注意:正如@Jeremy Ray Brown所说,这不是最佳选项,但在某些情况下可能会有用。

希望这能有所帮助。


2
这样的做法是可行的,但控制器决定要执行什么操作。您不需要涉及脚本。 - Jeremy Ray Brown
6
信不信由你,像这样的方法确实对我有所帮助。我们使用混合的ASP.NET MVC / AngularJS应用程序,并且在许多地方都有较旧的Web表单代码。我使用类似的方法重定向到一个使用Angular路由的URL。因为Angular路由遵循URL中的#标记,只能在客户端识别,所以不能将Redirect用于此类URL。 - thesentiment
@TNT 是的,你说得对,我只是提供了这个选项,可能对其他人有用。 - Shaiju T
2
抱歉如果我没有礼貌 @stom。当我需要使用重定向运行某些脚本时,例如在Google Analytics中计算一次访问时,我会使用这种方法。 - TNT
2
这终于可行了。@Yuriy的直接重定向解决方案对我失败了。出于安全原因,前往我们的MVC应用程序的请求必须通过代理服务器 - IIS与Rewrite插件+重写规则进行爬行。这种组合可能会干扰重定向URL。所以例如,当我想要从https://example.com/action重定向到https://www.example.org/?search=xyz时,使用`return Redirect("https://www.example.org/?search=xyz");`的结果是重定向到https://example.com/?search=xyz。 - Kraken101

2
也许有人正在寻找的解决方案就是这个: "最初的回答"。
Response.Redirect("/Sucesso")

This work when used in the View as well.


-5
尝试这个(我使用了Home控制器和Index视图):
return RedirectToAction("Index", "Home");

1
这将不会重定向到外部URI,而是转到Home Controller上的Index Action。 - Anthony Potts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接