【问题标题】:.NET 6 Function App - how to return a HTML page from a file.NET 6 Function App - 如何从文件返回 HTML 页面
【发布时间】: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


【解决方案1】:

不是最好的答案(感谢@Jonas Weinhardt 的帮助) - 但我找不到使用方法来做到这一点dotnet 隔离过程。

当移回非隔离时它工作正常。 (我想这与新的 GRPC 功能或类似功能有关?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-30
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    相关资源
    最近更新 更多