Перенаправлення на зовнішній 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
За бажанням можна зробити це замість цього: повернути новий RedirectResult ("yourURL", true); що майже точно так само, але дає вам параметр наприкінці, щоб вказати, чи є це постійне переадресація чи ні (HTTP 301 проти чогось іншого, можливо, 307?)
ctb

@ Mr.Pichler Швидше за все, 302, але ви завжди можете звернутися до Fiddler.
Юрій Факторович

1
Перенаправлення (правило) - 302, а RedirectPermanent (URL) - 301. Перевірка: stackoverflow.com/questions/17517318/…
TNT

Будь-які думки щодо створення цієї роботи з локальним HTML-файлом? Не працює:> return 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 з безліччю старих кодів веб-форм. Я використовував щось подібне для переадресації до URL-адреси, яка використовує кутову маршрутизацію. Оскільки кутова маршрутизація слідує за позначкою # у URL-адресі, вона розпізнається лише на стороні клієнта, тому Redirect не може бути використаний для таких URL-адрес.
ціпостанови

@TNT Так, ви маєте рацію, я просто запропонував це як варіант, який може бути корисним для інших.
shaijut

1
Вибачте, якщо я не був чемним @stom. Я використовую такий підхід, коли мені потрібно запустити якийсь сценарій з переспрямуванням, як-от підрахунок одного відвідування в Google Analytics.
ТНТ

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



-3

Спробуйте це (я використав домашній контролер та індексний перегляд):

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

Це не перенаправить на зовнішній URI, а замість цього на дію індексу на домашньому контролері.
Ентоні Поттс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.