我有一个mvc项目,我正在尝试发布到我通过Web表单和AJAX调用创建的WCF服务。当它遇到WebService时我遇到了一个错误,它说的只是GET。
以下是AJAX的重要部分:
SRCS = $(wildcard *.c) $(wildcard srcs/*.c)
通常情况下,数据会从表单中生成,但我只是为了测试目的而对其进行了硬编码。
网络服务部分如下所示:
var songRequest = {
Title: 'New Slang',
Artist: 'The Shins',
Genre: 'Indie',
Difficulty: 'Easy',
id: 11
};
$(document).ready(function () {
$("#createSong").on("click", "#saveSong", function () {
$.ajax({
url: 'http://localhost:17476/SongRESTService.svc/json/PostJson/',
dataType: 'jsonp',
contentType: 'application/json',
data: JSON.stringify(songRequest),
method: "POST"
}).done(function (response, b, c) {
console.log(response, b, c);
}).error(function (xhr) {
console.log(xhr);
alert("There was an error saving the song. Please try again.");
});
});
});
有什么想法吗?
答案 0 :(得分:0)
您已指定dataType: 'jsonp'
并尝试发出一个没有任何意义的POST请求,因为JSONP仅适用于GET请求(至少在jQuery的实现中)。如果您需要使用POST动词,可以考虑使用CORS
。为此,您可以在服务器上全局启用CORS,方法是将以下内容添加到Global.asax
:
protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, PUT, DELETE, GET, OPTIONS");
HttpContext.Current.Response.End();
}
}
}
现在从你的AJAX调用中删除这个dataType: 'jsonp'
。
如果您使用IIS,另一种可能性是将以下内容添加到您的web.config:
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST, PUT, DELETE, GET, OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
</system.webServer>