Javascript 使用WebAPI访问控制允许源站

Javascript 使用WebAPI访问控制允许源站,javascript,cors,Javascript,Cors,我读了很多关于这个问题的文章,没有找到解决办法 我用两种方法创建了简单的WebAPI服务项目:GET和PUT 通过使用此选项,我定义了我的服务以无任何限制地启用cors: 将以下属性置于控制器类之上: [启用CORS(来源:“*”,标题:“*”,方法:“*”,SupportsCredentials=true)] 在WebApiConfigclass I中放置以下配置: var cors = new EnableCorsAttribute("*", "*", "*"); confi

我读了很多关于这个问题的文章,没有找到解决办法

我用两种方法创建了简单的WebAPI服务项目:
GET
PUT

通过使用此选项,我定义了我的服务以无任何限制地启用cors:

  • 将以下属性置于控制器类之上:

    [启用CORS(来源:“*”,标题:“*”,方法:“*”,SupportsCredentials=true)]

  • WebApiConfig
    class I中放置以下配置:

        var cors = new EnableCorsAttribute("*", "*", "*");
        config.EnableCors(cors);
    
    Get方法工作得很好,我将使用以下代码从JS调用它:

  • 调用
    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设置的同一控制器下定义的My
    PUT
    方法引发以下异常:

    XMLHttpRequest无法加载http://server:port/api/controller/Put?domain=dom&lastName=lastN&firstName=firstN'. 请求的资源上不存在“Access Control Allow Origin”标头。起源'http://localhost:9444因此,不允许访问。响应的HTTP状态代码为400

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

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

    var requestObject = {
                         domain: domain, 
                         lastName: lastName, 
                         firstName  : firstName
                        };
    
    return $http.put('http://server:port/api/controller/Put', requestObject, config);
    
    然后像这样发送:

    var requestObject = {
                         domain: domain, 
                         lastName: lastName, 
                         firstName  : firstName
                        };
    
    return $http.put('http://server:port/api/controller/Put', requestObject, config);
    
    如果我理解错了,我很抱歉,希望这有帮助!
    再见。

    在您的标签中使用此代码

    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();
        }
    
    函数createCORSRequest(方法,url){
    var xhr=new XMLHttpRequest();
    如果(xhr中的“带凭证”){
    open(方法、url、true);
    }else if(XDomainRequest的类型!=“未定义”){
    xhr=新的XDomainRequest();
    open(方法,url);
    }否则{
    xhr=null;
    }
    返回xhr;
    }
    //从这里开始编码
    var-request=createCORSRequest(“get”,“get”);
    如果(请求){
    request.onload=函数(){
    //对request.responseText执行某些操作
    };
    request.send();
    }
    
    查看浏览器的开发人员工具。看看网络标签。看看Ajax发送的请求。这是你期望的吗?是的,已经做过了,地址很好