我创建了一个REST服务,并且我使用JQuery ajax连接到它,并且我以JSON的身份传递和接收数据。当我使用GET时它工作正常,但是当我正在进行POST时它不能正常工作,它甚至没有进入调试(服务)。
它给了我这个错误: XMLHttpRequest无法加载http://localhost:23262/GetAllDrawsShort。 No' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://localhost:40464'因此不允许访问。
我正在使用 Access-Control-Allow-Origin:* ,这应该允许所有域
我发现了类似的问题但尝试了它们但对我没有用。
Global.asax(服务)中的代码:
private void EnableCrossDmainAjaxCall()
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
}
服务类(服务):
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "GetAllDrawsShort", BodyStyle = WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json)]
public List<DrawShortObject> GetAllDrawsShort(string token, Guid userId)
{
if (Util.IsAuth(token))
{
return new DrawLogic().GetAllDrawsShort(userId);
}
else return null;
}
JQuery(客户端页面):
function GetAllDrawsShort() {
var jData = {};
jData.token = "123";
jData.userId = "2f9e15d9-3654-4a43-89f4-07fea98a146f";
return $.ajax({
cache: false,
type: "POST",
async: true,
url: address + "GetAllDrawsShort",
data: JSON.stringify(jData),
contentType: "application/json",
dataType: "json"
});
};
答案 0 :(得分:0)
我有类似的问题。我使用jsonp作为dataType并使用自定义回调包装响应来解决问题。
首先将您的ajax请求dataType更改为'jsonp'。
然后构建您的服务响应:
string callback = HttpContext.Current.Request.QueryString["callback"];
string data = callback + "(" + yourJsonData + ")";
HttpContext.Current.Response.Write(data);