我读了很多关于这个问题的帖子,但找不到解决方案。
我使用两种方法创建了简单的Web-API服务项目:GET
和PUT
。
使用此guid我定义了我的服务以启用cors而没有任何限制:
将以下属性放在控制器类之上:
[EnableCors(origins: "*", headers: "*", methods: "*", SupportsCredentials = true)]
在WebApiConfig
课程内,我提出了以下配置:
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设置定义的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
方法拒绝工作。
我该如何解决?
答案 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();
}