具有ASP.NET API凭据的JavaScript XMLHttpRequest
我试图用credentials=true执行post请求,但在发送请求后控制台上出现了一个具有ASP.NET API凭据的JavaScript XMLHttpRequest,javascript,.net,xmlhttprequest,cors,Javascript,.net,Xmlhttprequest,Cors,我试图用credentials=true执行post请求,但在发送请求后控制台上出现了一个CORS错误 这是我试图联系的控制器: [RoutePrefix("Account")] public class AccountController : ApiController; [HttpPost] [Route("Login")] public IHttpActionResult Login(LoginDto dto); 这就是我试图达到的目的: [RoutePrefix("Account")
CORS
错误
这是我试图联系的控制器:
[RoutePrefix("Account")]
public class AccountController : ApiController;
[HttpPost]
[Route("Login")]
public IHttpActionResult Login(LoginDto dto);
这就是我试图达到的目的:
[RoutePrefix("Account")]
public class AccountController : ApiController;
[HttpPost]
[Route("Login")]
public IHttpActionResult Login(LoginDto dto);
我在WebApiConfig:
config.EnableCors(new EnableCorsAttribute("http://localhost", "*", "*"));
下面是我使用Javascript
function createCORSRequest(method, url) {
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
if (xhr.withCredentials != undefined) {
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined") {
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
function post(url, data) {
return new Promise(
function httpPromise (resolve, reject) {
var request = createCORSRequest("post", url);
if (request) {
request.setRequestHeader('Accept', 'application/json');
request.setRequestHeader('Content-Type', 'application/json');
request.onloadend = function (progress) {
var status = request.status;
var result = JSON.parse(request.response || "null");
if (status >= 200 && status < 300) resolve(result);
else reject(result ? result.Message || result : result);
};
request.send(data);
}
});
}
函数createCORSRequest(方法,url){
var xhr=new XMLHttpRequest();
xhr.withCredentials=true;
if(xhr.withCredentials!=未定义){
open(方法、url、true);
}else if(XDomainRequest的类型!=“未定义”){
xhr=新的XDomainRequest();
open(方法,url);
}否则{
xhr=null;
}
返回xhr;
}
函数post(url、数据){
回报新的承诺(
功能httpPromise(解决、拒绝){
var请求=createCORSRequest(“post”,url);
如果(请求){
setRequestHeader('Accept','application/json');
setRequestHeader('Content-Type','application/json');
request.onloadend=函数(进度){
var status=request.status;
var result=JSON.parse(request.response | | |“null”);
如果(状态>=200&&status<300)解决(结果);
else拒绝(结果?结果。消息| |结果:结果);
};
请求发送(数据);
}
});
}
下面是控制台中出现的错误消息
无法加载XMLHttpRequest。对飞行前请求的响应未通过访问控制检查:响应中“访问控制允许凭据”标头的值为“”,当请求的凭据模式为“包括”时,该值必须为“真”。因此,不允许访问源“”。XMLHttpRequest启动的请求的凭据模式由withCredentials属性控制
您需要在
config.EnableCors(…)
调用中指定SupportsCredentials=true
:
config.EnableCors(new EnableCorsAttribute("http://localhost", "*", "*")
{ SupportsCredentials = true });
您能否共享您正在发送的构造头以及开发人员工具的响应?可能会有很大帮助。错误消息已经非常明确地告诉您缺少什么。。。所以,去添加那个响应头。@CBroe我确实添加了
request.setRequestHeader(“Access-Control-Allow-Credentials”,“true”)代码>当我第一次看到问题时,结果没有任何变化。@Bottonbertalan我该怎么检查?(使用chrome)开发者控制台->网络选项卡->点击你的请求->标题