Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 呼叫WCF服务后出现问题-400错误请求_C#_Ajax_Json_Wcf_Post - Fatal编程技术网

C# 呼叫WCF服务后出现问题-400错误请求

C# 呼叫WCF服务后出现问题-400错误请求,c#,ajax,json,wcf,post,C#,Ajax,Json,Wcf,Post,我在Windows服务器上发布了IIS 7.5上的WCF服务 它基本上有两种方法,仅用于烟雾测试 服务合同如下: [ServiceContract] public interface IFSMServiceWeb { [OperationContract] [WebInvoke(Method="POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrappe

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

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

服务合同如下:

[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调用方法call loginUtenteViaMail,但是我不能用POST方法调用方法registuretenteviamail

这里是用于测试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控制台):

我错在哪里


提前谢谢你

不行!我解决了这个问题。 我错过了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'
});
});
});

你能发布JSON.stringify(dati)的输出吗?console.log(JSON.stringify(dati));返回以下内容:{“用户名”:“名称”、“密码”:“机密”、“密钥”:“1234”、“dbVersion”:“1.0”}尽管有contentType属性,我仍然存在此问题
$(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'
});
});
});