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