gpt4 book ai didi

c# - ASP.NET Core 中的 HttpHead

转载 作者:行者123 更新时间:2023-12-04 16:08:09 26 4
gpt4 key购买 nike

在我的 ASP.NET 核心 Controller 中,我有以下 HttpGet 函数:

[HttpGet("[action]")]
[HttpHead("[action]")]
[ResponseCache(NoStore = true)]
public async Task<IActionResult> GetProofPdf(long studentid)
{
var rawPdfData = await _studentLogic.StudentPdfAsync(User, studentid);
if (Request.Method.Equals("HEAD"))
{
Response.ContentLength = rawPdfData.Length;
return Json(data: "");
}
else
{
return File(rawPdfData, "application/pdf");
}
}

这确实很好用。返回的文件对象可以从浏览器中保存。唯一的问题是在 IE 中嵌入 PDF。 IE 首先发送一个 HEAD 请求。 HEAD 请求失败,因此 IE 甚至不会尝试获取 PDF。其他浏览器在 HEAD 失败时不会发送 HEAD 或使用 GET,但 IE 不会。

由于我想要如此支持 IE,我想创建一个 HEAD 操作。只需添加 [HttpHead("[action]")]到该函数将不起作用,可能是因为对于 HEAD 内容必须为空(“HEAD 方法与 GET 相同,但服务器不得在
响应。”)。

那么如何在 ASP.NET Core 中创建 HttpHead-Verb-Function 呢?如何返回空内容但正确的内容长度?

最佳答案

沿着这些方向的东西应该适合你。

    [HttpGet]
[HttpHead]
[ResponseCache(NoStore = true)]
public async Task<IActionResult> GetProofPdf(long studentid)
{
if (Request.Method.Equals("HEAD"))
{
//Calculate the content lenght for the doc here?
Response.ContentLength = $"You made a {Request.Method} request".Length;
return Json(data: "");
}
else
{
//GET Request, so send the file here.
return Json(data: $"You made a {Request.Method} request");
}
}

关于c# - ASP.NET Core 中的 HttpHead,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47775555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com