Azure 函数状态码 500 内部服务器错误

Posted

技术标签:

【中文标题】Azure 函数状态码 500 内部服务器错误【英文标题】:Azure Function Status Code 500 internal server error 【发布时间】:2020-03-11 19:30:04 【问题描述】:

我有一个逻辑应用程序,它使用 azure 函数作为 http 触发器并获取返回字符串。 当 azure 函数要接收 Base64 字符串,使用该信息创建一个文件并上传到分配的存储帐户时,我每次运行 Azure 函数时都会不断收到状态代码 500 内部服务器错误。经过多次试验和错误,我推断问题发生在从 Base64 字符串创建文件的时间和创建 blob 容器客户端的时间。

所以请帮帮我。

更新:根据您的一些建议,我实施了应用程序洞察,运行了几次,并且出现了两次此错误:

Azure.RequestFailedException

消息:执行函数时出现异常:BlobAdd 指定的资源名称包含无效字符

状态:400(指定的资源名称包含无效字符。)

错误代码:无效资源名称

FailedMethod:Azure.Storage.Blobs.BlobRestClient+Container.CreateAsync_CreateResponse。

public static async Task<IActionResult> Run(
         [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
         ILogger log)
     
         log.LogInformation("C# HTTP trigger function processed a request.");

     string requestBody = await new StreamReader(req.Body).ReadToEndAsync();

     return await Base64(requestBody);
 

public static  async Task<IActionResult> Base64(string Base64Body)

    string HoldDBase = "";
    string TestBlobData = "null";

    if (Base64Body.Length > 10)
    
        HoldDBase = Base64Body;
    
    else
    
        TestBlobData = "The Base64Body did not Pass";

        return (ActionResult)new OkObjectResult
           (
               new
               
                   TestBlobData
               
               );
    

        //Connection string of the Storage Account Azure
        string ConnectionString = "xxxxxxxxx";

        // Create a BlobServiceClient object which will be used to create a container client
        BlobServiceClient blobServiceClient = new BlobServiceClient(ConnectionString);

        //Create a unique name of the container
        string ContainerName = "Base64_Blob" + Guid.NewGuid().ToString();

        //create the container and return a container client Object
        BlobContainerClient ContainerClient =  await blobServiceClient.CreateBlobContainerAsync(ContainerName); //Problem Here

        //create a local file in the Storage
        string localPath = "D:/Reliance/OlaForm/uploadsO";
        string fileName = "quickstart" + Guid.NewGuid().ToString() + ".txt";
        string localFilePath = Path.Combine(localPath, fileName);

        //convert string to bytes
        byte[] BaseBytes = Convert.FromBase64String(HoldDBase);

         //create file in local data
         await File.WriteAllBytesAsync(localFilePath,BaseBytes); //Problem Here        

      //get reference to a blob
      BlobClient blobclient = ContainerClient.GetBlobClient(fileName);

      // Open the file and upload its data
      FileStream uploadFileStream = File.OpenRead(localFilePath);
      await blobclient.UploadAsync(uploadFileStream);
     // blobclient.Upload(uploadFileStream);
      uploadFileStream.Close();

      //blob id from blobclient and return it
      TestBlobData = blobclient.ToString();

    TestBlobData = HoldDBase;
    return (ActionResult)new OkObjectResult
    (
        new 
            TestBlobData
        
        );

【问题讨论】:

尝试在本地运行它并检查异常,或者如果您启用了 Application Insights,则在那里监控您的函数的执行,看看是否有任何错误。由于信息不足,出现任何错误,请更新您的问题。 错误是什么?您应该启用 Application Insights 以获取有关错误的更多信息(堆栈、错误行等) 【参考方案1】:

您正在尝试写入“D”磁盘。由于 Azure 函数无法直接访问磁盘,因此在尝试写入不存在的磁盘时会收到 500 错误。

要从 Azure 函数写入文件,您可以使用 Azure 存储 SDK。

【讨论】:

以上是关于Azure 函数状态码 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章

post 错误码500是啥

http statusCode 500状态码

http statusCode 500状态码

axios 500 内部服务器错误后代码执行停止

Azure 逻辑应用程序 - 获取 500 内部服务器错误的响应正文

出现意外错误类型 = 内部服务器错误,状态 = 500