Перенаправление на внешний URI из контроллера ASP.NET MVC


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
В чем твоя ошибка? Или симптом? Это идет куда-нибудь?
Пол Сасик

Ответы:


342

Если вы говорите о ASP.NET MVC, у вас должен быть метод контроллера, который возвращает следующее:

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

В противном случае нам нужно больше информации об ошибке, которую вы получаете в перенаправлении. Я бы сделал шаг, чтобы убедиться, что URL не пуст.


5
При желании вы можете сделать это вместо этого: return new RedirectResult ("yourURL", true); который почти точно такой же, но в конце выдает параметр, указывающий, является ли это постоянным перенаправлением или нет (HTTP 301 против чего-то еще, 307 может быть?)
ctb

@ Mr.Pichler Скорее всего, 302, но вы всегда можете проверить с Fiddler.
Юрий Факторович

1
Redirect (rul) - 302, а RedirectPermanent (url) - 301. Проверьте: stackoverflow.com/questions/17517318/…
TNT,

Есть какие-нибудь мысли о том, как заставить это работать с локальным HTML-файлом? Не работает:> возврат перенаправления ("C: /Users/Me/Documents/test.html");
Стив Эггеринг


15

Использование JavaScript

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

Примечание. Как сказал @ Джереми Рэй Браун, это не лучший вариант, но в некоторых ситуациях он может оказаться полезным.

Надеюсь это поможет.


1
Нечто подобное может работать, но контроллер решает, какое действие выполнить. Вам не нужен сценарий для участия.
Джереми Рэй Браун

6
Хотите верьте, хотите нет, но такой подход помог мне. У нас есть гибридное приложение ASP.NET MVC / AngularJS с множеством старых веб-форм. Я использовал нечто подобное для перенаправления на URL, который использует угловую маршрутизацию. Поскольку угловая маршрутизация следует за знаком # в URL, она распознается только на стороне клиента, поэтому Redirect не может использоваться для таких URL.
thesentiment

@TNT Да, вы правы, я просто предоставил это в качестве опции, которая может быть полезна для других.
Shaijut

1
Извините, если я не был вежливым @stom. Я использую этот подход, когда мне нужно запустить какой-нибудь скрипт с перенаправлением, например, подсчитать одно посещение в Google Analytics.
TNT

Это наконец работает. Простое решение @Yuriy для перенаправления не удалось для меня. По соображениям безопасности запросы, направляемые в наше приложение MVC, должны сканироваться через прокси-сервер - IIS с правилом перезаписи надстройки + перезаписи. Эта комбинация, вероятно, портит URL перенаправления. Так что когда я хочу перенаправить с example.com/action на example.org/?search=xyz , используя return Redirect("https://www.example.org/?search=xyz");результат - перенаправление на example.com/?search=xyz .
Kraken101

0

Возможно решение, которое кто-то ищет, состоит в следующем:

Response.Redirect("/Sucesso")

Эта работа также используется при просмотре.



-3

Попробуйте это (я использовал Home controller и Index View):

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

Это не будет перенаправлять на внешний URI, а вместо этого на действие индекса на домашнем контроллере.
Энтони Поттс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.