C# 如何在通过VS2019部署并从zip读取的Azure Function app中上载文件?
我正在使用Azure Function app V2和.net core 2.2堆栈构建一个web服务。我的功能正按照要求完美运行。我试图实现的是从JSON文件中读取函数,以便从该文件中获取特定值以进行进一步处理。我正在使用VisualStudio2019,并通过IDE本身发布应用程序。因此,默认情况下,我的应用程序处于读取模式。我上传的JSON文件和我的函数文件在同一个文件中。此外,我还尝试从配置中删除网站\u RUN\u,但没有成功,因为它不再在门户中显示功能 当我在通过VS2019方式(从zip读取)发布应用程序后运行应用程序时,确保json与函数文件位于同一文件夹中,我收到如下错误: 找不到文件“D:\home\site\wwwroot\functionname\filename.json”。 我正在尝试使用以下代码访问文件:C# 如何在通过VS2019部署并从zip读取的Azure Function app中上载文件?,c#,asp.net-core,azure-functions,C#,Asp.net Core,Azure Functions,我正在使用Azure Function app V2和.net core 2.2堆栈构建一个web服务。我的功能正按照要求完美运行。我试图实现的是从JSON文件中读取函数,以便从该文件中获取特定值以进行进一步处理。我正在使用VisualStudio2019,并通过IDE本身发布应用程序。因此,默认情况下,我的应用程序处于读取模式。我上传的JSON文件和我的函数文件在同一个文件中。此外,我还尝试从配置中删除网站\u RUN\u,但没有成功,因为它不再在门户中显示功能 当我在通过VS2019方式(从
var filePath=Path.Combine(context.FunctionDirectory,“filename.json”)代码>根据我的测试,如果我们在VisualStudio2019中将函数部署到Azure,则无法将json文件部署到Azure。我们需要通过kudo手动将文件上传到Azure函数
在Visual Studio中将函数部署到Azure
通过kudu将文件上载到Azure函数
此外,如果您的文件太大,我建议您将文件存储在Azure Blob存储中,然后在函数中使用Blob。有关更多详细信息,请参阅
更新
关于如何配置Azure Blob存储输入,请参考以下步骤
更新您的项目
a。在VisualStudio中安装sdk
安装软件包Microsoft.Azure.WebJobs.Extensions.Storage-版本3.0.8
b。更新local.settings.json
请添加用于存储json文件的帐户的连接字符串
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": " your function storage",
"MyStorage": "the storage you use to store file",
"FUNCTIONS_WORKER_RUNTIME": "dotnet"
}
}
c。更新代码
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
[Blob("test/test.json", FileAccess.Read, Connection = "MyStorage")] Stream blob,
ILogger log,ExecutionContext context)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string text=null;
blob.Seek(0,SeekOrigin.Begin);
using (StreamReader streamReader = new StreamReader(blob)) {
while (!streamReader.EndOfStream) {
string textLine = await streamReader.ReadLineAsync();
text += textLine;
}
dynamic data = JsonConvert.DeserializeObject(text);
return (ActionResult)new OkObjectResult(data);
}
}
[FunctionName(“Function1”)]
公共静态异步任务运行(
[HttpTrigger(AuthorizationLevel.Anonymous,“get”,“post”,Route=null)]HttpRequest请求,
[Blob(“test/test.json”,FileAccess.Read,Connection=“MyStorage”)]流Blob,
ILogger日志,ExecutionContext(上下文)
{
LogInformation(“C#HTTP触发器函数处理了一个请求。”);
字符串文本=空;
查找(0,SeekOrigin.Begin);
使用(StreamReader StreamReader=新StreamReader(blob)){
而(!streamReader.EndOfStream){
string textLine=等待streamReader.ReadLineAsync();
text+=文本行;
}
动态数据=JsonConvert.DeserializeObject(文本);
返回(ActionResult)新的OkObjectResult(数据);
}
}
发布您的项目
更新您的函数应用程序设置
试验
如果要随功能应用程序一起部署其他文件,请更改.csproj文件。找到ItemGroup节点并进行更新。我正在添加两个文件json1.json和index.html。我必须手动添加CopyTopPublishDirectory节点,默认情况下,对于用户添加的项目,这些节点不存在。使用VS2019中的zip部署进行部署
保存最新
保存最新
保存最新
保存最新
保存最新
从未
您想通过这种方式实现什么?由于在更改json文件时需要重新部署,您还可以在代码中硬编码json字符串。你想过配置吗?是的,当我在代码中使用硬代码json时,它就工作了。但最终我的JSON正在增长,我想从JSON文件中动态提取数据。因为我的函数应用程序是基于webhook触发的,所以我想以更好的方式维护我的json。希望这是有道理的。我也试过用kudu。该文件被上传,我得到错误,我不能“写”文件。现在,当我将配置设置更改为“读/写”模式时,我的函数将从函数应用程序中消失。而且,我的函数当前是httprequest类型。是否可以使用c#library将blob输入绑定到我的httprequest触发器函数?