2013-03-28 2 views
3

По некоторым причинам мне приходится перенаправлять запросы из моего приложения MVC 4 на страницы с абсолютными URL-адресами, расположенными в других доменах. Вот код, который я использую:Перенаправление по абсолютному URL не работает в MVC 4

public ActionResult Test(string url) 
{ 
    return Redirect(url); 
} 

Все отлично работает, когда я пытаюсь его на моей локальной машине, но когда я публикую код для производства и попытаться заставить его работать там, то у меня есть некоторые проблемы. например, для перенаправления запроса на «https://stackoverflow.com/questions/ask» он будет перенаправлен на «http: // {{myserverdomain.com}}/questions/ask». Таким образом, запрос будет перенаправлен на локальный путь «questions/ask» вместо абсолютного URL.

Не знаю, что и где я должен проверить. Я был бы признателен за какие-то намеки, что может быть проблема и где, чтобы проверить его ...

Только в случае, если: сервер Windows Server 2008 R2 Enterprise

UPDATE

URL/HTML кодирование не причина проблемы. Изменение метода к

public ActionResult Test() 
{ 
    return Redirect("https://stackoverflow.com/questions/ask"); 
} 

даст тот же результат ... он будет перенаправлен на «вопросы/задать»/подозревает, что причина с модулем перезаписи URL, но не знает, как проверить его еще ...

РЕШЕНИЕ

вот ссылка, которая помогла решить проблему: http://forums.iis.net/t/1171047.aspx

+0

Я этого никогда не видел, но Я бы проверял несколько вещей. Во-первых, ваш URL-адрес кодируется HTML/URL-адресом и вызывает проблему. Во-вторых, вы включаете в свой url protocal (http (s): //)? Что делать, если вы на самом деле сначала установили url в контроллере, а затем перенаправили (например, с вашим примером выше) - каков результат? наконец, если вы передаете URl контроллеру для перенаправления, почему бы просто не установить это как цель вашей ссылки на ваш взгляд? – Tommy

+0

Кодирование Url/Html не является причиной ... просто изменилось описание проблемы. Это пример теста, и на самом деле я не буду получать URL как параметр метода :) –

ответ

0

после некоторых попыток исправить это я не получил никакого успеха ... так что я решил пойти другим путем и подготовили некоторые вид пользовательского перенаправления через страницу перенаправления, которая изменяет местоположение JavaScript.

Вот код ...

метод Helper:

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.конфиг:

<add key="custom_redirect_page" value="/Redirect/RedirectTo"/> 

Контроллер:

public ActionResult RedirectTo(string url) 
    { 
     return View((object)System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(url))); 
    } 

И HTML:

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

Не нравится этот вид хаки, но это работает для меня ...

6

это странно, потому что это правильный путь ...

public ActionResult YourAction() 
{ 
    // ... 
    return Redirect("http://www.example.com"); 
} 

Вы не можете напрямую перенаправлять серверную команду из ответа ajax. Однако вы могли бы вернуть JsonResult с новым URL-адресом и выполнить перенаправление с помощью javascript.

Server Side:

public ActionResult YourAction() 
{ 
    // ... 
    return Json(new {url = "http://www.example.com"}); 
} 

стороне клиента:

$.post("@Url.Action("YourAction")", function(data) { 
    window.location = data.url; 
}); 
+0

спасибо за ответ. Я уже думал о перенаправлении на стороне клиента, но мне очень не нравится эта идея ... Я подозреваю, что это проблема с конфигурацией URL-адреса URL-адреса или что-то еще ... –

+0

Вы только что дали мне решение, я использовал перенаправление в функция пустоты и ничего не происходит. Поэтому мне пришлось использовать ActionResult и вернуть перенаправление. Благодарю. –

+0

Без проблем Ронен! :) –

Смежные вопросы