3

何らかの理由で、MVC 4 アプリケーションからの要求を、別のドメインにある絶対 URL を持つページにリダイレクトする必要があります。私が使用するコードは次のとおりです。

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

ローカルマシンで試してみるとすべて正常に動作しますが、コードをプロダクションに公開してそこで動作させようとすると、いくつかの問題が発生します...たとえば、リクエストを ' https://stackoverflow .com/questions/ask ' http://{{myserverdomain.com}}/questions/ask' にリダイレクトされます。そのため、リクエストは絶対 URL ではなく、ローカル パス「questions/ask」にリダイレクトされます。

何をどこで確認すればよいかわかりません。何が問題なのか、どこで確認すればよいのか、ヒントをいただければ幸いです...

念のため: サーバーは Windows Server 2008 R2 Enterprise です

アップデート

URL/HTML エンコーディングは問題の原因ではありません。への変更方法

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

同じ結果が得られます... 'questions/ask'/ にリダイレクトされます/ URL 書き換えモジュールの理由を疑っていますが、まだ確認する方法がわかりません...

解決

問題の解決に役立つリンクは次のとおりです。http://forums.iis.net/t/1171047.aspx

4

2 に答える 2

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;
});
于 2013-03-28T01:27:03.173 に答える
-1

いくつかの修正を試みた後、成功しませんでした...そこで、別の方法に進み、JavaScriptの場所を変更するリダイレクトページを介して、ある種のカスタムリダイレクトを準備することにしました。

これがコードです...

ヘルパー メソッド:

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.config :

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

この種のハックは好きではありませんが、それは私にとってはうまくいきました...

于 2013-06-04T16:23:42.953 に答える