2015-01-20 132 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

相关问题