REST服务,POST上不允许访问

时间:2015-06-04 13:16:32

标签: ajax rest post service

我创建了一个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"
    });
};

1 个答案:

答案 0 :(得分:0)

我有类似的问题。我使用jsonp作为dataType并使用自定义回调包装响应来解决问题。

首先将您的ajax请求dataType更改为'jsonp'。

然后构建您的服务响应:

string callback = HttpContext.Current.Request.QueryString["callback"]; string data = callback + "(" + yourJsonData + ")"; HttpContext.Current.Response.Write(data);