POST调用WCF服务的问题 - 400 BAD REQUEST

时间:2015-01-20 20:12:16

标签: c# ajax json wcf post

我在Windows Server上发布了IIS 7.5上的WCF服务

基本上有两种方法,仅用于烟雾测试。

这里是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

这里用于测试POST方法的javascript代码

$(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 

我哪里错了?

提前谢谢

1 个答案:

答案 0 :(得分: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'
});
});
});