0

Web サイトのディレクトリにデプロイされる mvc3 Web アプリケーションがあります。アプリケーションのアドレスはhttp://wwww.xx.com/aopo/のようです。aopo はディレクトリの名前です。デプロイ後、js ファイルの URL が機能しなくなっていることがわかりました。と同じように、ハードコードのURLでjsコードを書いていたので

$.ajax({url:"/employee/getemployee"})

その場合、リクエストはhttp://wwww.xx.com/aopo/employee/getemployeeではなくhttp://wwww.xx.com/employee/getemployeeに送信され、404 が返されます。jsにはそのようなコードがたくさんあります。私はjsを変更したくありません。それを機能させるための簡単なアプローチはありますか?global.asax.cs で要求を書き換えることはできますか?

4

3 に答える 3

3

URL 参照を次のように変更する必要があると思います。

$.ajax({url:"@Url.Action("getemplotee","employee")"})

これがスクリプト ファイルの場合は、正しい URL をページの要素に書き込み、それを読み取ることができます。

<div id='Main' data-url='@Url.Action("getemplotee","employee")' />

次に、スクリプトで:

$.ajax({url:$('#Main').data('url')})

ガーディング:

There is lots of code in js like that. I don't want to modify the js

わかりましたが、仮想ディレクトリの下での実行を説明するために適切なヘルパー メソッドを使用する必要があるため、弾丸を噛んで正しい方法で修正することをお勧めします。

于 2013-05-13T17:59:01.757 に答える
2

あまりきれいではない解決策の1つは、

次のように、(一般的な場所で) レイアウトに URL プレフィックスを設定する

<script type="text/javascript">
    @{
        string root = Url.Content("~/");
        if (root.EndsWith("/", StringComparison.Ordinal))
        {
            root = root.Substring(0, root.Length - 1);
        }
    }
    window.URL_PREFIX = '@root';
</script>

次に、ajaxSendフックでプレフィックスを使用して、URL を変更します。

$(document).ajaxSend(function (event, jqxhr, settings) {
    if (window.URL_PREFIX && settings.url.indexOf(window.URL_PREFIX)) {
        settings.url = window.URL_PREFIX + settings.url;
    }
});

注: グローバル オプションを false に設定して $.ajax() または $.ajaxSetup() を呼び出した場合、.ajaxSend() メソッドは起動しません。

これは理想的な解決策ではありませんが、厳しい状況では役立つかもしれません。

お役に立てれば。

于 2013-05-13T19:59:15.190 に答える
1

いいえ、それは不可能です。リクエストがアプリケーションに届かないため、アクセスできず、書き換えることができません。

ルート サイトを制御できる場合は、IIS 書き換えモジュールを使用して URL を Web サイトに書き換えることができます。

于 2013-05-13T17:53:51.710 に答える