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


170

我正在尝试从操作方法重定向到外部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);
    }

谢谢克里斯


1
你怎么了 还是症状?这可以去哪里吗?
Paul Sasik,2009年

Answers:


342

如果您正在谈论ASP.NET MVC,则应该有一个返回以下内容的控制器方法:

return Redirect("http://www.google.com");

否则,我们需要有关您在重定向中遇到的错误的更多信息。我将逐步检查以确保网址不为空。


5
(可选)您可以这样做:return new RedirectResult(“ yourURL”,true); 几乎完全一样,但是最后给您参数以指示它是否是永久重定向(HTTP 301与其他重定向,也许是307?)
ctb

@ Mr.Pichler最有可能是302,但您始终可以与Fiddler核对。
Yuriy Faktorovich

1
重定向(RUL)为302永久重定向(URL)是301检查:stackoverflow.com/questions/17517318/...
TNT

关于使用本地HTML文件进行操作有任何想法吗?不起作用:>返回Redirect(“ C:/Users/Me/Documents/test.html”);
史蒂夫·埃杰林


15

使用JavaScript

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

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

希望这可以帮助。


1
这样的事情可以工作,但是控制器决定要执行什么动作。您不需要脚本。
杰里米·雷·布朗

6
信不信由你,这种方法确实对我有所帮助。我们有一个混合的ASP.NET MVC / AngularJS应用程序,到处都有许多旧的Web表单代码。我使用了类似的方法来重定向到使用Angular路由的URL。由于角度路由在URL中的#号之后,因此只能识别客户端,因此无法将Redirect用于此类URL。
感叹

@TNT是的,您是正确的,我只是将此作为选项提供,可能对其他人有用。
shaijut

1
抱歉,如果我不礼貌@stom。当我需要通过重定向运行一些脚本时,例如在Google Analytics(分析)中进行一次访问,我会使用这种方法。
TNT

终于可以了。@Yuriy的直接重定向解决方案对我来说失败了。出于安全原因,前往我们的MVC应用程序的请求必须通过代理服务器-具有Rewrite插件+重写规则的IIS进行爬网。这种组合可能会使重定向URL混乱。所以。当我想从example.com/action重定向到example.org/?search=xyz时,使用return Redirect("https://www.example.org/?search=xyz");的结果是重定向到example.com/?search=xyz
Kraken101 '17



-3

试试这个(我已经使用了Home控制器和Index View):

return RedirectToAction("Index", "Home");

这不会重定向到外部URI,而是重定向到本地控制器上的Index Action。
Anthony Potts
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.