Furion:v3.5.0
之前一直用的Blazor-Server进行开发和使用,这种方式不涉及跨域。
HttpClient类的 Response.Content.Headers 里面是能够获取到access-token, x-access-token的。
因为了同套代码支持Blazor-Wasm模式,使用中发现:
这里面断点:HttpClient类的 Response.Content.Headers 只能够获取到:content-type。
然后又用jquery版本写了个简单的前端调用, 仍旧不行。
服务端用了原始的AspnetCore和Furion,和NodeJs Express来做。。 是不是就是规定就不允许访问?
CorsAccessorSettings的WithHeaders也试过。
我的述求就是能够访问到Headers里面的access-token, x-access-token
services.AddCorsAccessor();
app.UseCorsAccessor(); //开启跨域,允许所有
//按照大佬增加所有允许
app.Use(async (context, next) =>
{
context.Response.Headers["Access-Control-Allow-Headers"] = "*, access-token, x-access-token";
context.Response.Headers["Access-Control-Allow-Methods"] = "*";
context.Response.Headers["Access-Control-Allow-Origin"] = "*";
await next.Invoke();
});
//Service里面
public void Login([FromBody] LoginInDto loginDto)
{
var _httpContextAccessor = App.GetService<IHttpContextAccessor>();
_httpContextAccessor.HttpContext.Response.Headers["access-token"] = "123"; //accessToken;
_httpContextAccessor.HttpContext.Response.Headers["x-access-token"] = "456";//refreshToken;
}
前端代码:http://localhost:3000/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script>
function loadXMLDoc() {
var settings = {
"url": "http://localhost:5015/login",
"method": "POST",
"timeout": 0,
"headers": {
"Content-Type": "application/json"
},
"data": JSON.stringify({
"Password": "1",
"Account": "1"
}),
};
$.ajax(settings).done(function (data,status,xhr) {
var headers = xhr.getAllResponseHeaders();
var arr = headers.trim().split(/[\r\n]+/);
var headerMap = {};
arr.forEach(function (line) {
var parts = line.split(': ');
var header = parts.shift();
var value = parts.join(': ');
headerMap[header] = value;
});
//打印内容:application/json; charset=utf-8。
//但是我想把 access-token都能获取到。
console.info(headerMap);
});
}
</script>
</head>
<body>
<button type="button" onclick="loadXMLDoc()">获取响应Headers</button>
</body>
</html>
浏览器请求截图:
1.OPTIONS 204:
2.POST 200:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
经过测试(使用 Furion
的 samples
作为测试:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript">
function loadXMLDoc() {
var settings = {
url: "https://localhost:44316/api/person/all",
method: "GET",
headers: {
"Content-Type": "application/json",
},
};
$.ajax(settings).done(function (data, status, xhr) {
console.log(xhr);
console.log(xhr.getAllResponseHeaders());
console.log(xhr.getResponseHeader("environment"));
});
}
loadXMLDoc();
</script>
</body>
</html>
{
"CorsAccessorSettings": {
"WithExposedHeaders": ["access-token","x-access-token", "environment"]
}
}
注入,jquery 的 ajax 本身不能获取常规以外的头,如果你需要获取指定的头,就必须配置 WithExposeHeaders
的名称
登录 后才可以发表评论