2

ASP.Net WebAPI と javascript/jquery を使用します。

次の JScript コードがあります。var apiUrl = "/api/myService/myMethod/

  $.GetJSON(apiUrl+"/"+myValue).done(function(data){more code here});

私の開発環境では、これで問題なく動作します。しかし、テスト サーバーに移動すると、MyApp というサブディレクトリ内の Web アプリケーションになります。サイトのルートではなくアプリのルートに移動するように JavaScript に指示する方法はありますか? その文字列の前に「/MyApp/」を追加する必要はありません。

何か嘘をつくvar test="~/api/myService/myMethod/"

4

1 に答える 1

1

次の JScript コードがあります: var apiUrl = "/api/myService/myMethod/

そのようなコードはありません。ASP.NET MVC アプリケーションで URL をハードコーディングしないでください。URL を扱うときは、常にヘルパーを使用する必要があります。たとえば、これをレイアウトのグローバル変数に含めることができます。

<script type="text/javascript">
    var apiUrl = '@Url.Route("DefaultApi", new { controller = "values", httproute = "" });';
</script>

httproute = ""MVC ルートではなく Web API ルートを使用するように URL ヘルパーに指示するために使用したルート パラメーターに間違いなくお気付きでしょう(これらは 2 つのまったく異なるものです)。

しかし、ほとんどの場合、それは必要ありません。この$.getJSON関数に渡す URL は、DOM の一部である可能性があります。たとえば、実際にはこの$.getJSON関数をそのように呼び出すことはありません。通常は、目立たないようにアンカーまたはフォームを AJAX 化するために呼び出します。したがって、URL はすでに DOM の一部である可能性があります。たとえば、アンカーを AJAX 化したいとします。よし、先に進んで、正しい URL を指すようにこのアンカーを書き込んでください。

@Html.RouteLink(
    "click me", 
    "DefaultApi", 
    new { httproute = "", controller = "values", id = "123" }, 
    new { id = "mylink" }
)

かっこいい、今それをAJAX化してください:

$(function() {
    $('#mylink').click(function() {
        $.getJSON(this.href, function(result) {
            alert('success');
        });
        return false;
    });
});

JavaScript で URL をハードコーディングする必要がなくなったことがわかりますか? JavaScript を使用して、DOM に既に存在するものを目立たないように拡張するだけです。これは、ルート定義を考慮して正しい URL が作成されるようにする適切な URL ヘルパーによって生成されます。このようにして、単一の場所 (ルートを構成する場所) でルートのパターンを変更でき、ビューについて心配する必要はありません。

于 2013-06-10T19:08:54.277 に答える