Отправка запроса Post в RESTful WCF с помощью json
Я пробовал каждую комбинацию, чтобы отправить запрос на отправку запроса POST в RESTful WCF из jQuery.
может кто-то имитировать и заставить его работать. Код здесь : http://pastebin.com/Ua97919C
Я работаю с WCF с прошлых 2 лет, но каждый раз, когда я отправляю запрос POST, это заставляет меня много бороться.
Я изо всех сил пытаюсь заставить его работать с прошлых 4 дней и прошел по крайней мере 35-40 сообщений.
в конце концов, это запрос будет отправлен с iPhone на WCF.
когда я проверяю его с помощью Fiddler, ошибка в основном: * сервер обнаружил ошибку при обработке запроса. Сообщение об исключении: "входящее сообщение имеет неожиданный формат сообщения "Raw". Ожидаемыми форматами сообщений для операции являются "Xml", "Json". Это может быть связано с тем, что WebContentTypeMapper не был настроен для привязки. Дополнительные сведения см. В документации WebContentTypeMapper.'. Смотрите логи сервера для более подробности. Трассировка стека исключений: at
System.ServiceModel.Dispatcher.DemultiplexingDispatchMessageFormatter.DeserializeRequest(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.UriTemplateDispatchFormatter.DeserializeRequest(Message message, Object[] parameters)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.DeserializeInputs(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc)
at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)
2 ответов
добавить Global.ascx
файл в решении youe и замените код следующим
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Cache-Control", "no-cache");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
еще одна вещь chnage dataType:'text'
$.ajax({
type: "POST",
url: "http://localhost:4638/Edulink.svc/SaveUserData",
dataType: "text",
contentType: "application/json",
data:'{"EmailID":"praveen", "LevelID": 1}',
success:function(data, status) {
console.log(data); //gives 1
},
error:function(request, status, error) {
alert("o0ops");
}
});
проблема заключается в стиле тела операции. Вы объявили это как
[WebInvoke(
Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest,
UriTemplate = "/SaveUserData")]
string SaveUserData(UserInfo userInfo);
это означает, что запрос должен быть завернут в объекте, с членом для имени объекта. Если вы отправите этот запрос ниже, он должен работать.
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
url: url,
data: '{"userInfo":{"EmailID":"praveen", "LevelID": 1}}',
dataType: "json",
processData: false,
success: function (data, textStatus, jqXHR) {
debugger;
},
error: function (jqXHR, textStatus, errorThrown) {
debugger;
}
});
Другой альтернативой является изменение BodyStyle
свойство операции to Bare
в этом случае ваш первоначальный запрос был правильным.