ASP.NET 核心中的 HttpHead
HttpHead in ASP.NET Core
在我的 ASP.NET 核心控制器中,我有以下 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");
}
}
这确实很好用。 returned 文件对象可以从浏览器保存。唯一的问题是在 IE 中嵌入 PDF。 IE首先发送一个HEAD请求。 HEAD 请求失败,因此 IE 甚至不会尝试获取 PDF。其他浏览器在 HEAD 失败时不发送 HEAD 或使用 GET,但 IE 不会。
因为我想要支持IE,所以我想创建一个HEAD Action。仅向函数添加 [HttpHead("[action]")]
将不起作用,可能是因为对于 HEAD 而言,内容必须为空(“HEAD 方法与 GET 相同,除了服务器不得 return 中的消息正文
回应。”)。
那么如何在 ASP.NET Core 中创建 HttpHead-Verb-Function?如何 return 清空内容但内容长度正确?
这些方面的内容应该适合您。
[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");
}
}
在我的 ASP.NET 核心控制器中,我有以下 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");
}
}
这确实很好用。 returned 文件对象可以从浏览器保存。唯一的问题是在 IE 中嵌入 PDF。 IE首先发送一个HEAD请求。 HEAD 请求失败,因此 IE 甚至不会尝试获取 PDF。其他浏览器在 HEAD 失败时不发送 HEAD 或使用 GET,但 IE 不会。
因为我想要支持IE,所以我想创建一个HEAD Action。仅向函数添加 [HttpHead("[action]")]
将不起作用,可能是因为对于 HEAD 而言,内容必须为空(“HEAD 方法与 GET 相同,除了服务器不得 return 中的消息正文
回应。”)。
那么如何在 ASP.NET Core 中创建 HttpHead-Verb-Function?如何 return 清空内容但内容长度正确?
这些方面的内容应该适合您。
[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");
}
}