2015-01-20 158 views
2

我在我的Windows Server WCF服務上發佈的IIS 7.5問題與POST調用WCF服務 - 400錯誤的請求

它有兩種基本方法,只是冒煙測試。

這裏的ServiceContract:

[ServiceContract] 
public interface IFSMServiceWeb 
{ 
    [OperationContract] 
    [WebInvoke(Method="POST", ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped, RequestFormat = WebMessageFormat.Json)] 
    string registraUtenteViaMail(string username, string password, string key, string dbVersion); 


    [OperationContract] 
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.Wrapped)] 
    string loginUtenteViaMail(string username, string password, string key, string dbVersion); 
} 

,並在這裏實現:

public class FSMServiceWeb : IFSMServiceWeb 
{ 

    public string registraUtenteViaMail(string username, string password, string key, string dbVersion) 
    { 
     return username + password + key + dbVersion; 
    } 

    public string loginUtenteViaMail(string username, string password, string key, string dbVersion) 
    { 
     return username + password + key + dbVersion; 
    } 
} 

我沒有問題,打電話與GET,方法調用loginUtenteViaMail,但我不能把與POST方法方法registraUtenteViaMail

這裏的JavaScript代碼來測試POST方法

$(document).ready(function(){ 


$("#send").click(function(){ 

    var username = $("#username").val(); 
    var password = $("#password").val(); 
    var key =  $("#key").val(); 
    var dbVersion = $("#dbVersion").val(); 
    var dati = {username : username, password : password, key : key, dbVersion : dbVersion}; 

    $.ajax({ 
     type: 'POST', 
     url: '/FSMServiceWeb.svc/registraUtenteViaMail', 
     data: JSON.stringify(dati), 
     success: function (data) { 
      console.log(data);}, 
      error: function (data){}, 
     dataType: 'JSON' 
    }); 
}); 
}); 

我得到這個錯誤(Chrome的控制檯):

POST http://xxx.xxx.xxx.xxx/FSMServiceWeb.svc/registraUtenteViaMail 400 (Bad Request)       jquery.min.js:4 
l.cors.a.crossDomain.send  jquery.min.js:4 
o.extend.ajax     POSTtest.js:12 
(anonymous function)   jquery.min.js:3 
o.event.dispatch    jquery.min.js:3 
r.handle      jquery.min.js:3 

我在哪裏錯了?

謝謝您提前

+0

能否請您發表JSON.stringify(DATI)的輸出? – 2015-01-20 20:22:24

+0

console.log(JSON.stringify(dati)); 返回此結果: {「username」:「name」,「password」:「secret」,「key」:「1234」,「dbVersion」:「1.0」} – dar0x 2015-01-20 20:38:57

回答

3

沒辦法!我解決了這個問題。 我想念我的AJAX請求的重要組成部分:

contentType: "application/json; charset=utf-8", 

其實正確的請求應該是這樣:

$(document).ready(function(){ 


$("#send").click(function(){ 

var username = $("#username").val(); 
var password = $("#password").val(); 
var key =  $("#key").val(); 
var dbVersion = $("#dbVersion").val(); 
var dati = {username : username, password : password, key : key, dbVersion : dbVersion}; 

$.ajax({ 
    type: 'POST', 
    url: '/FSMServiceWeb.svc/registraUtenteViaMail', 
    contentType: "application/json; charset=utf-8", // MISSING PART! 
    data: JSON.stringify(dati), 
    success: function (data) { 
     console.log(data);}, 
     error: function (data){}, 
    dataType: 'JSON' 
}); 
}); 
}); 
+0

儘管contentType屬性仍然存在, – Shane 2017-10-17 11:44:39

相關問題