Javascript 从ASP.NET核心Web Api获取React中的特定响应头(例如,内容配置)
我正在从Javascript 从ASP.NET核心Web Api获取React中的特定响应头(例如,内容配置),javascript,c#,reactjs,asp.net-core,asp.net-core-webapi,Javascript,C#,Reactjs,Asp.net Core,Asp.net Core Webapi,我正在从WebAPI控制器返回一个文件。Content-Disposition标题值将自动填充,其中还包含我的文件名 我的后端代码如下所示: [HttpGet("Download")] public async Task<ActionResult> Download([FromQuery]CompanySearchObject req) { string fileName = "SomeFileName_" + DateTime.UtcNow.Date.ToShortDate
WebAPI
控制器返回一个文件。Content-Disposition
标题值将自动填充,其中还包含我的文件名
我的后端代码如下所示:
[HttpGet("Download")]
public async Task<ActionResult> Download([FromQuery]CompanySearchObject req)
{
string fileName = "SomeFileName_" + DateTime.UtcNow.Date.ToShortDateString() + ".csv";
var result = await _myService.GetData(req);
Stream stream = new System.IO.MemoryStream(result);
return File(stream, "text/csv", fileName.ToString());
}
但我正在努力获取这些数据,因为当我在前端执行console.log时,我看不到这一点。。如您所见,我记录了responseconsole.log('response Headers:',response.Headers)代码>但我唯一看到的是:
这些数据不应该在某个地方吗?我想知道如何从内容配置中读取值并获取文件名
谢谢各位
Cheers对于获取响应标头,它返回的是一个可编辑的,您必须循环通过响应.Headers
,而不是日志响应.Headers对象
请尝试以下代码:
response.headers.forEach(console.log);
console.log(response.headers.get('content-disposition'));
我这样做的方式是通过循环遍历所有请求头,直到匹配我要查找的特定头
// Headers
private void GetSetCustomHeaders(ref string theUsername, ref string thePassword, ref string theAPIKey)
{
try
{
foreach (KeyValuePair<string, IEnumerable<string>> header in this.Request.Headers)
{
string headerType = header.Key;
string headerTypeUpperTrim = headerType.Trim().ToUpper();
IEnumerable<string> headerValue = header.Value;
string fullHeaderValue = "";
bool isFirstHeaderValue = true;
foreach (string headerValuePart in headerValue)
{
if (isFirstHeaderValue)
{
fullHeaderValue = headerValuePart;
isFirstHeaderValue = false;
}
else
{
fullHeaderValue = fullHeaderValue + Environment.NewLine + headerValuePart;
}
}
if (headerTypeUpperTrim == "USERNAME")
{
theUsername = fullHeaderValue;
}
else if (headerTypeUpperTrim == "PASSWORD")
{
thePassword = fullHeaderValue;
}
else if (headerTypeUpperTrim == "APIKEY")
{
theAPIKey = fullHeaderValue;
}
}
}
catch (Exception)
{
//MessageBox.Show("Error at 'GetSetCustomHeaders'" + Environment.NewLine + Environment.NewLine + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
//标题
private void GetSetCustomHeaders(参考字符串用户名,参考字符串密码,参考字符串密码)
{
尝试
{
foreach(此.Request.Headers中的KeyValuePair标头)
{
字符串headerType=header.Key;
字符串headerTypeUpperTrim=headerType.Trim().ToUpper();
IEnumerable headerValue=header.Value;
字符串fullHeaderValue=“”;
bool isFirstHeaderValue=true;
foreach(字符串headerValue在headerValue中的部分)
{
如果(isFirstHeaderValue)
{
fullHeaderValue=HeaderValue部分;
isFirstHeaderValue=false;
}
其他的
{
fullHeaderValue=fullHeaderValue+Environment.NewLine+HeaderValue部分;
}
}
如果(headerTypeUpperTrim==“用户名”)
{
用户名=fullHeaderValue;
}
否则如果(headerTypeUpperTrim==“密码”)
{
密码=fullHeaderValue;
}
否则如果(headerTypeUpperTrim==“APIKEY”)
{
theAPIKey=fullHeaderValue;
}
}
}
捕获(例外)
{
//MessageBox.Show(“GetSetCustomHeaders”处的错误+Environment.NewLine+Environment.NewLine+ex.Message,“错误”,MessageBoxButton.OK,MessageBoxImage.Error);
}
}
在上面的示例代码中,我正在查找“用户名”、“密码”和“APIKey”。它们作为ref
参数传递,因此如果在这个方法中设置它们,它们也会在调用这个GetSetCustomHeaders
方法的方法中设置,因为它引用相同的东西。因此,当我最初调用此方法时,我的变量设置为string.Empty
希望这有帮助。也有同样的问题。我的问题是CORS。如果您正在使用它,则需要在配置中以如下方式公开它:
app.UseCors(builder =>
{
builder.AllowAnyOrigin();
builder.AllowAnyMethod();
builder.AllowAnyHeader();
builder.WithExposedHeaders("Content-Disposition"); // this is the important line
});
app.UseCors(builder =>
{
builder.AllowAnyOrigin();
builder.AllowAnyMethod();
builder.AllowAnyHeader();
builder.WithExposedHeaders("Content-Disposition"); // this is the important line
});