Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用JavaScript在客户端获取自定义头_Javascript_C#_.net_Http Headers - Fatal编程技术网

无法使用JavaScript在客户端获取自定义头

无法使用JavaScript在客户端获取自定义头,javascript,c#,.net,http-headers,Javascript,C#,.net,Http Headers,我试图发送一个在服务器端设置了名为“x-custom-token”的自定义头的响应,浏览器正在接收它。但在客户端。我无法得到它 这是我的服务器端代码(.Net framework) [AllowAnonymous] [HttpPost] //[EnableCors(来源:“*”,标题:“*”,方法:“*”,公开标题:“x-custom-token”)] [AllowCrossSiteAttribute] //[ValidateAntiForgeryToken] 公共操作结果登录(字符串帐户、字符

我试图发送一个在服务器端设置了名为“x-custom-token”的自定义头的响应,浏览器正在接收它。但在客户端。我无法得到它

这是我的服务器端代码(.Net framework)

[AllowAnonymous]
[HttpPost]
//[EnableCors(来源:“*”,标题:“*”,方法:“*”,公开标题:“x-custom-token”)]
[AllowCrossSiteAttribute]
//[ValidateAntiForgeryToken]
公共操作结果登录(字符串帐户、字符串密码)
{
如果(帐户==null | |密码==null)
{
抛出新ArgumentNullException(“帐户或密码为空”);
}
尝试
{
if(this.userService.CheckUserData(帐户、密码))
{
字符串roleName=this.userService.GetRole(帐户、密码);
string-token=this.jWTService.GenerateToken(account,roleName);
AppendHeader(“访问控制公开头”,“x-custom-token”);
AppendHeader(“x-custom-token”,token);
重定向(“~/Home/Index”);
返回Json(“Ok”);
}
其他的
{
Response.StatusCode=204;
重定向(“~/Login/Login”);
返回Json(“无许可”);
}
}
捕获(例外情况除外)
{
Response.StatusCode=400;
Response.StatusDescription=例如消息;
重定向(“~/Login/Login”);
返回Json(“无许可”);
}
}
这是客户端(Javascript):

const loginButton=document.getElementsByClassName(“登录”)[0];
addEventListener(“单击”),异步函数(){
const account=document.getElementsByClassName(“accountInput”)[0]。值;
const password=document.getElementsByClassName(“passwordInput”)[0]。值;
const body=`account=${account}&password=${password}`;
const re=wait sendRequest(“/Login/Login”,“POST”,“Content Type”:“application/x-www-form-urlencoded”},body);
如果(关于状态===200){
控制台日志(re);
log(re.headers.get(“访问控制暴露头”);
log(re.headers.get(“x-custom-token”);
log(re.headers.get(“x-aspnet-version”);
调试器
window.location.href=`${window.location.protocol}/${window.location.hostname}:${Number(44398)}/Home/Index`;
}
否则{
警报(`response status:${re.status}${re.json()}`);
}
},假);
在这行代码中
console.log(re.headers.get(“x-custom-token”)我总是得到空值。。。。
还添加了访问控制公开标题。
我确信浏览器具有此自定义标题的响应

这是我的
sendRequest()
方法:

异步函数sendRequest(路径、方法、头、正文){
const协议=window.location.protocol;
const domainName=window.location.hostname;
const port=“44398”
让选项={
方法:方法,,
标题:标题,
}
如果(正文){
options.body=body;
}
const response=wait fetch(`${protocol}/${domainName}:${port}${path}`,选项)
返回响应;
}

我正在试图弄清楚发生了什么。

在返回Json(“Ok”)之前;您正在呼叫Response.Redirect(“~/Home/Index”); 它重定向到新的get请求,而不是返回对当前客户端调用的响应

而不是调用Response.Redirect(“~/Home/Index”);在返回Json(“Ok”), 您可以从服务器端删除它,并在javascript函数中处理客户端的ajax请求响应

请查看下面的url以了解您的理解


.

你能试着注释掉C代码中的重定向行吗?可能重定向没有保留标头。那么sendRequest服务使用的是什么?xhr fetch?我的sendRequest()服务正在使用fetch。我注释了Response.Redirect(),这是有效的,谢谢