问题与POST调用WCF服务 - 400错误的请求
问题描述:
我在我的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
我在哪里错了?
谢谢您提前
答
没办法!我解决了这个问题。 我想念我的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
能否请您发表JSON.stringify(DATI)的输出? – 2015-01-20 20:22:24
console.log(JSON.stringify(dati)); 返回此结果: {“username”:“name”,“password”:“secret”,“key”:“1234”,“dbVersion”:“1.0”} – dar0x 2015-01-20 20:38:57