Javascript 使用WebAPI访问控制允许源站
我读了很多关于这个问题的文章,没有找到解决办法 我用两种方法创建了简单的WebAPI服务项目:Javascript 使用WebAPI访问控制允许源站,javascript,cors,Javascript,Cors,我读了很多关于这个问题的文章,没有找到解决办法 我用两种方法创建了简单的WebAPI服务项目:GET和PUT 通过使用此选项,我定义了我的服务以无任何限制地启用cors: 将以下属性置于控制器类之上: [启用CORS(来源:“*”,标题:“*”,方法:“*”,SupportsCredentials=true)] 在WebApiConfigclass I中放置以下配置: var cors = new EnableCorsAttribute("*", "*", "*"); confi
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设置的同一控制器下定义的MyPUT
方法引发以下异常:
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发送的请求。这是你期望的吗?是的,已经做过了,地址很好