命名空间不能直接包含Azure功能应用程序中的成员

时间:2018-01-23 08:54:56

标签: azure azure-functions

TARGET:执行Azure功能教程并复制代码,但在VS2017上本地执行时遇到了一些错误。我感谢你的帮助。

https://www.cyotek.com/blog/upload-data-to-blob-storage-with-azure-functions

错误1 - 与Run

相关
  

CS0116命名空间不能直接包含字段或方法等成员UploadToBlobFunctionApp C:\ AzureFunctions \ UploadToBlobFunctionApp \ UploadToBlobFunctionApp \ UploadToBlobFunction.cs 15 Active

错误2 - 与Task CreateBlob

相关
  

CS0116命名空间不能直接包含诸如字段或方法UploadToBlobFunctionApp之类的成员   C:\ AzureFunctions \ UploadToBlobFunctionApp \ UploadToBlobFunctionApp \ UploadToBlobFunction.cs 45 Active

错误3 - 与await CreateBlob相关:

  

CS0103名称' CreateBlob'当前上下文中不存在UploadToBlobFunctionApp C:\ AzureFunctions \ UploadToBlobFunctionApp \ UploadToBlobFunctionApp \ UploadToBlobFunction.cs 36活动

代码Function.cs

using System;
using System.Configuration;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Blob;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
HttpStatusCode result;
string contentType;

result = HttpStatusCode.BadRequest;

contentType = req.Content.Headers?.ContentType?.MediaType;

if (contentType == "application/json")
{
    string body;

    body = await req.Content.ReadAsStringAsync();

    if (!string.IsNullOrEmpty(body))
    {
        string name;

        name = Guid.NewGuid().ToString("n");

        await CreateBlob(name + ".json", body, log);

        result = HttpStatusCode.OK;
    }
}

return req.CreateResponse(result, string.Empty);
}

private async static Task CreateBlob(string name, string data, 
TraceWriter log)
{
string accessKey;
string accountName;
string connectionString;
CloudStorageAccount storageAccount;
CloudBlobClient client;
CloudBlobContainer container;
CloudBlockBlob blob;

accessKey = "qwertyw4VhRajxlZn9C4hTMB8oSwE4klNUsvTy9VeTCIQ11111vFVVGExDwJ+JUboFv2B79j+W6foqLWE92w==";
accountName = "mystorage";
connectionString = "DefaultEndpointsProtocol=https;AccountName=" + accountName + ";AccountKey=" + accessKey + ";EndpointSuffix=core.windows.net";
storageAccount = CloudStorageAccount.Parse(connectionString);

client = storageAccount.CreateCloudBlobClient();

container = client.GetContainerReference("functionupload");

await container.CreateIfNotExistsAsync();

blob = container.GetBlockBlobReference(name);
blob.Properties.ContentType = "application/json";

using (Stream stream = new MemoryStream(Encoding.UTF8.GetBytes(data)))
{
    await blob.UploadFromStreamAsync(stream);
}
}

1 个答案:

答案 0 :(得分:0)

您正在引用的示例是使用脚本函数(csx文件)。它们主要用于直接在Azure门户中编辑代码。

我认为您正在尝试使用csprojcs文件创建预编译的应用程序。在这种情况下,您的代码应该是有效的C#,即所有方法都应该在类中。

查看this example

您还可以使用属性来标记您的功能和触发器,而不是手动创作function.json,请参阅示例here