2014-09-02 164 views
0

我正在學習asp.net web mvc 5/asp.net web api 2.現在,我創建了一個默認的web api 2項目(使用bootstrap模板)。我還通過以下步驟啓用了Cors:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api#enable-corsasp.net web api 2和jquery post

當我運行該項目並嘗試通過Fiddler Web Debugger調用API時,它一切正常。這是原始請求我發送:

POST HTTP:/// mywebapi /令牌HTTP/1.1 內容類型:應用程序/ x-WWW的形式進行urlencode 用戶代理:提琴手 主機: 內容 - 長度:71

grant_type =密碼& [email protected] &密碼= mypwd01

但現在我試着通過一個jQuery調用Ajax調用API,現在我被困。 這是我到目前爲止有:

function sendRequest() { 
      //var method = $('#method').val(); 
      var email = '[email protected]'; 
      var pwd = 'mypwd01!'; 

      $.ajax({ 
       //crossDomain: true, 
       type: 'post', 
       url: serviceUrl, 
       dataType: 'jsonp', 
       contentType: 'application/x-www-form-urlencoded; charset=UTF-8', 
       data: 'grant_type=password&userName='+ email + '&Password=' + pwd, 
       xhrFields: { withCredentials: true } 
      }).done(function (data) { 
       $('#value1').text(data); 
      }).error(function (jqXHR, textStatus, errorThrown) { 
       $('#value1').text(jqXHR.responseText || textStatus); 
      }); 
     } 

現在,當我跑我的網頁,我得到錯誤400,錯誤請求(我的本地機器上)。當我在服務器上運行相同的頁面時,我得到一個200響應。我無法弄清楚我做錯了什麼。

回答

0

好吧,我已經成功地創建連接。我懷疑這是否是正確的方法,所以任何建議都是值得歡迎的。我的最終目標是創建一個可以對服務器進行授權呼叫的電話/離子應用程序。現在,這是我做的:

在服務器上,除了使CORS(見我的上述最初的問題)我還添加在webconfig以下行:

<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
     </customHeaders> 
    </httpProtocol> 
</system.webServer> 

我用了*因爲手機需要打電話給服務器(phonegap/ionic)。

現在,我已經改變了我的客戶端代碼:

$.ajax({ 
    //crossDomain: true, 
    type: "POST", 
    url: serviceUrl, 
    //processData: false, 
    dataType: 'json', 
    contentType: 'application/x-www-form-urlencoded; charset=UTF-8', 
    data: 'grant_type=password&userName=' + email + '&Password='+ pwd, 
}).done(function (data) { 
    $('#value1').text(JSON.stringify(data)); 
}).error(function (jqXHR, textStatus, errorThrown) { 
    $('#value1').text(jqXHR.responseText || textStatus); 
}); 
0

使用如下

function sendRequest() { 
     //var method = $('#method').val(); 
     var email = '[email protected]'; 
     var pwd = 'mypwd01!'; 

     $.ajax({ 
      //crossDomain: true, 
      type: 'POST', 
      url: serviceUrl, 
      dataType: 'jsonp', 
      contentType: 'application/x-www-form-urlencoded; charset=UTF-8', 
      data: Json.stringify({ 'grant_type':'password','userName':email, 'Password': pwd }), 
      xhrFields: { withCredentials: true } 
     }).done(function (data) { 
      $('#value1').text(data); 
     }).error(function (jqXHR, textStatus, errorThrown) { 
      $('#value1').text(jqXHR.responseText || textStatus); 
     }); 
    } 
+0

謝謝您的回答。我已經測試過,但沒有奏效。當我在服務器上測試它時,我收到了grant_type錯誤。我通過Chrome在客戶端注意到的是,請求是通過GET發送的。我改變了按鈕點擊使它成爲一個jQuery事件,並使用event.preventDefault(),但沒有運氣。 – kwv84 2014-09-03 13:29:21