【发布时间】:2022-11-17 04:30:09
【问题描述】:
我目前正在将几个 Azure Function Apps 迁移到 .NET 6。其中之一涉及通过 HTTP 请求返回各种内容文件。
以前(在 .NET 3.1 上)这适用于 json/文本文件和 HTML:
var callbackFileLocation = Path.Combine(Helper.GetFunctionPath(), "Files", filename);
var stream = new FileStream(callbackFileLocation, FileMode.Open, FileAccess.Read)
{
Position = 0
};
var okObjectResult = new OkObjectResult(stream);
okObjectResult.ContentTypes.Clear();
if (filename.Contains(".html"))
{
okObjectResult.ContentTypes.Add(new Microsoft.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
}
else
{
okObjectResult.ContentTypes.Add(new Microsoft.Net.Http.Headers.MediaTypeHeaderValue("application/json"));
}
return okObjectResult;
这不会在 .NET Core 6 上返回相同的结果——您往往只是将对象类型作为名称给出,例如Microsoft.AspNetCore.Mvc.OkObjectResult或者系统.IO.文件流.修复 json 文件很容易,因为我可以将它们转换为文本,并确保函数应用程序将其作为负载返回。
HTML 似乎更棘手 - 我试过阅读流到最后,以及这里和其他网站上提到的各种方法,例如:
public static HttpResponseMessage Run(string filename)
{
var callbackFileLocation = Path.Combine(Helper.GetFunctionPath(), "Files", filename);
var response = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new FileStream(callbackFileLocation, FileMode.Open);
response.Content = new StreamContent(stream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/html");
return response;
}
或者在 FileContentResult(“application/octet-stream”)或 ContentResult 中返回 HTML 文本,例如:
new ContentResult { Content = content, ContentType = "text/html", StatusCode = 200 };
我得到的最接近的是作为原始文本的 HTML,但希望在浏览器中呈现 HTML。
有什么建议么? .NET 6 上关于此的文档似乎很薄......谢谢!
【问题讨论】:
-
return Content("<h1>Test</h1>","text/html; charset=utf-8");为我工作。它在浏览器中正确呈现为 html。 -
嗯,我创建了一个新的函数应用程序,虽然我无法让您的代码工作,但这会呈现 var html = "<html><body><p>Test</p></body></html> "; var result = new ContentResult { Content = html, ContentType = "text/html" };返回结果;但这仍在使用 webjobs 而不是新的 Microsoft.Azure.Functions.Worker
-
实施我的代码有什么问题?因为您的代码与我的代码基本相同 :D 但是您现在可以使用它了吗?
-
Content() 是 MVC 的一部分,默认情况下它不是 Function Apps 的一部分。我已将该函数从独立函数转换为标准函数,现在可以让它呈现 HTML。微软缺乏关于这些变化的信息是一个真正的 PITA。
-
哦,当然。对不起,我忘了。我的错。但很高兴你现在开始工作了。是的,文档现在不是最好的 :D
标签: c# html azure-functions .net-6.0