2013-03-28 26 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的企業

UPDATE

URL/HTML編碼不是問題的原因。改變方法的

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

會產生相同的結果...這將被重定向到「問題/問」 /懷疑與URL重寫模塊的原因,但不知道如何檢查它尚未...

SOLUTION

這裏是幫助解決問題的鏈接:http://forums.iis.net/t/1171047.aspx

+0

我從來沒有見過這個,但我會檢查一些事情。首先,您的網址是HTML/URL編碼並導致問題。其次,你是否在你的url中包含協議(http(s)://)?如果你真的先在控制器中設置url,然後重定向(例如,用上面的示例),結果如何?最後,如果您將URl傳遞給控制器​​以重定向,爲什麼不在您的視圖中將該鏈接設置爲您的鏈接的目標? – Tommy 2013-03-28 03:03:59

+0

Url/Html編碼不是原因...只是改變了問題的描述。這是測試示例,實際上我不會將URL作爲方法的參數:) – 2013-03-28 11:34:49

回答

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)); 
    } 
} 

網絡。配置

<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響應執行服務器端重定向。但是,您可以使用新的url返回JsonResult並使用javascript執行重定向。

服務器端:

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

客戶端:

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

感謝您的回覆。我已經考慮過客戶端重定向,但我不太喜歡這個主意......我懷疑這是模塊URL重寫或其他什麼配置問題... – 2013-03-28 01:52:52

+0

你剛剛給了我解決方案,我用重定向一個void函數,沒有任何事情發生。所以我不得不使用ActionResult並返回重定向。謝謝。 – 2014-12-20 22:17:37

+0

Ronen沒問題! :) – 2014-12-20 22:20:51