2017-02-08 4 views
0

私は奇妙な問題があります:私はclientSide App(jquery)を同じドメインのWebAPIに対して実行しています。自分のローカルコンピュータのIIS上で、ルートWebサイト(Sites-> MyApp)としてホストすると、OKとPostの両方で正常に動作します。典型的なAPI呼び出しは次のようになります。Web APIへのAjaxのポストは成功しますが、既定のWebサイト(IIS)でホストされているとクライアント側で失敗します

$.get("api/GetList", null, function (data) { 
     var list = data; 
    }) 

しかし、私はIISの「既定のWebサイト」の下でそれをホストする場合、サブアプリケーションとして、一般的なAPI呼び出しは次のようになります。

$.get("MyApp/api/GetList", null, function (data) { 
     var list = data; 
    }) 

すべてのGET呼び出しは正常に動作しますが、POST呼び出しは異常な動作をします。

$.ajax({ 
      url: "MyApp/api/Fields", 
      type: 'POST', 
      dataType: 'json', 
      contentType: false, 
      cache: false, 
      processData: false, 
      data: data, 
      success: function (res) { 
       var x = res;    
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       // 
      } 
     }); 

ウェブAPIメソッドは次のようになります:私はこのようなPOST呼び出しが作る

[HttpPost] 
[Route("api/Fields")] 
public async Task<IHttpActionResult> Post() {... 

私はPOST呼び出しを実行すると、それがサーバーに到達すると、サーバーメソッドが正常に動作しますが、それが返ってくると私はエラーになります。 http://localhost/MyApp/index.html私は送信ボタンをクリックして、(アクションがサーバー側で成功していても!!)これを取得:ここから HTTPエラー404.0 - あなたが見ることができるように 要求されたURL http://localhost:80/api/Fields?input_1=sometext

が見つかりません、MyAppのへのルート消えてしまい、私はPOSTをしましたが、IISはGETのようにリクエストを処理します!

同じ構成のIIS上のテストサーバーで実行している場合、同じコード1:1はこのエラーなしで正常に動作します。 アイデア

+0

http:// localhost/MyApp/api/fieldsへのAJAX投稿(VS2015のF5を使用して、正しい方法に到達していることがわかります)しかし、私は応答として取得します.HTTPエラー404.0 - 見つかりませんリクエストされたURL http:// localhost:80/api/Fields?input_1 = 123と:リクエストされたリソースはhttpメソッド 'get'をサポートしていません! 1. POSTでした。 2. http:// localhost/MyApp/api/fieldsと呼ばれ、http:// localhost:80/api/Fieldsではありません。 – amira

答えて

0

は、ウェブからの応答なしで多数の研究の後、私は突然、私はaction属性を削除してフォームタグとすぐaction属性!:

<form id="Id" name="Name" action="api/action" enctype="multipart/form-data" novalidate> 

が含まれていることを見て、それは余分なAPI呼び出しを解決しました。私はフォームのデフォルトの動作を防止する必要がありました。だから、私はAjax Post API呼び出しを$(document).ready関数の中に入れます:

jQuery(function ($) { 
     var frm = $('#FormId'); 
     frm.submit(function (ev) { 
      ev.preventDefault(); 

      //do validation etc.. 

      //do Ajax Post 
      $.ajax({ 
       url: "api/Fields/", 
       method: 'POST', 
       dataType: 'json', 
       contentType: false,... 
      }); 
      return false; 
     }); 
    }); 

フォームのデフォルト動作を忘れないように忘れないでください!

関連する問題