使用Web API访问Control-Allow-Origin

时间:2014-12-17 07:56:55

标签: javascript cors

我读了很多关于这个问题的帖子,但找不到解决方案。

我使用两种方法创建了简单的Web-API服务项目:GETPUT

使用此guid我定义了我的服务以启用cors而没有任何限制:

  1. 将以下属性放在控制器类之上:

    [EnableCors(origins: "*", headers: "*", methods: "*", SupportsCredentials = true)]

  2. WebApiConfig课程内,我提出了以下配置:

        var cors = new EnableCorsAttribute("*", "*", "*");
        config.EnableCors(cors);
    

    Get方法工作得很好,我使用这段代码从JS调用它:

  3. enter image description here

    PUT方法的调用由下一个代码定义:

       var addUser = function(domain, firstname, lastname, idsid){
                var config = {
                    withCredentials: true,
                    headers:  {
                    'Content-Length': '4096'
                }};
                return $http.put('http://server:port/api/controller/Put?domain=dom&lastName=lastN&firstName=firstN', config);
            };
    

    问题在于: 我在同一个控制器下使用相同的cors设置定义的PUT方法给我带来了以下异常:

    XMLHttpRequest cannot load http://server:port/api/controller/Put?domain=dom&lastName=lastN&firstName=firstN'. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9444' is therefore not allowed access. The response had HTTP status code 400

    为什么会这样?我为接受cors请求设置了整个控制器,但Put方法拒绝工作。 我该如何解决?

2 个答案:

答案 0 :(得分:2)

您是否正在使用角度来进行javascript客户端请求? 因为在angular中,“$ http.put”的第二个参数是请求的对象:put(url,data,[config]); 所以尝试在object中转换你的querystrig值,如下所示:

var requestObject = {
                     domain: domain, 
                     lastName: lastName, 
                     firstName  : firstName
                    };

发送它,就像这样:

return $http.put('http://server:port/api/controller/Put', requestObject, config);

如果我理解错了,我很抱歉,希望这有帮助! 再见。

答案 1 :(得分:0)

<Script></Script>标记

中使用此代码
function createCORSRequest(method, url){
        var xhr = new XMLHttpRequest();
        if ("withCredentials" in xhr){
            xhr.open(method, url, true);
        } else if (typeof XDomainRequest != "undefined"){
            xhr = new XDomainRequest();
            xhr.open(method, url);
        } else {
            xhr = null;
        }
        return xhr;
    }

    // Starts your Coding from here 
    var request = createCORSRequest("get", "<YOUR_URL>");
    if (request){
        request.onload = function(){
            //do something with request.responseText
        };
        request.send();
    }