Azure功能无法正常工作?

时间:2017-11-09 05:53:57

标签: c# azure http powerapps

我有一个azure函数,它使用多种形式的输入文件 -

    public static class function
{
    [FunctionName("Function1")]
    public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log,string imagename)
    {


        // parse query parameter
        string name = req.GetQueryNameValuePairs()
            .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
            .Value;

        // Get request body
        dynamic data = await req.Content.ReadAsAsync<object>();

        // Set name to query string or body data
        name = name ?? data?.name;


       log.Info("C# HTTP trigger function processed a request.");


        return name == null
            ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
            : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
    }

正如您目前所看到的,我没有对文件做任何事情。我试图让它先运行。

我的招摇文件看起来像这样:

        {
 "swagger": "2.0",
  "info": {
  "version": "1.0.0",
  "title": "Testfunction"
  },
  "host": "Testfunction.azurewebsites.net",
 "paths": {
   "/api/Function1": {
  "post": {
    "tags": [
      "Function1"
    ],
    "operationId": "UploadImage",
    "consumes": [
      "multipart/form-data"
    ],
    "produces": [
      "application/json",
      "text/json",
      "application/xml",
      "text/xml"
    ],
    "parameters": [
      {
        "name": "file",
        "in": "formData",
        "required": true,
        "type": "file",
        "x-ms-media-kind": "image"
      },
      {
        "name": "fileName",
        "in": "query",
        "required": false,
        "type": "string"
      }
    ],
    "responses": {
      "200": {
        "description": "Saved successfully",
        "schema": {
          "$ref": "#/definitions/UploadedFileInfo"
        }
      },
      "400": {
        "description": "Could not find file to upload"
      }
    },
    "summary": "Image Upload",
    "description": "Image Upload"
  }
}},
"definitions": {
"UploadedFileInfo": {
  "type": "object",
  "properties": {
    "FileName": {
      "type": "string"
    },
    "FileExtension": {
      "type": "string"
    },
    "FileURL": {
      "type": "string"
    },
    "ContentType": {
      "type": "string"
    }
  }
}

},
  "securityDefinitions": {
"AAD": {
  "type": "oauth2",
  "flow": "accessCode",
  "authorizationUrl": "https://login.windows.net/common/oauth2/authorize",
  "tokenUrl": "https://login.windows.net/common/oauth2/token",
  "scopes": {}
   }
 },
 "security": [
  {
   "AAD": []
  }
],
"tags": []

}

我已经正确配置了Auth0,但是当我尝试在Powerapps中运行它时,它会返回未知错误作为响应。

我正在尝试将图像发送到我要将其转换为PDF的azure函数。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

根据您的代码,您似乎正在使用precompiled functions。我发现你的HttpTrigger功能代码与你提供的swagger文件不匹配。简单来说,我只使用Azure门户并创建了我的HttpTrigger函数,如下所示:

<强> run.csx:

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage request, TraceWriter log)
{
    //Check if the request contains multipart/form-data.
    if (!request.Content.IsMimeMultipartContent())
    {
        return request.CreateResponse(HttpStatusCode.UnsupportedMediaType);
    }

    //The root path where the content of MIME multipart body parts are written to
    string root = Path.Combine(System.Environment.GetEnvironmentVariable("HOME"), @"site\wwwroot\HttpTriggerCSharp1\");
    var provider = new MultipartFormDataStreamProvider(root);

    // Read the form data
    await request.Content.ReadAsMultipartAsync(provider);

    List<UploadedFileInfo> files = new List<UploadedFileInfo>();
    // This illustrates how to get the file names.
    foreach (MultipartFileData file in provider.FileData)
    {   
        var fileInfo = new FileInfo(file.Headers.ContentDisposition.FileName.Trim('"'));
        files.Add(new UploadedFileInfo()
        {
            FileName = fileInfo.Name,
            ContentType = file.Headers.ContentType.MediaType,
            FileExtension = fileInfo.Extension,
            FileURL = file.LocalFileName
        });
    }
    return request.CreateResponse(HttpStatusCode.OK, files, "application/json");
}

public class UploadedFileInfo
{
    public string FileName { get; set; }
    public string FileExtension { get; set; }
    public string FileURL { get; set; }
    public string ContentType { get; set; }
}

注意: MIME多部分正文部分存储在您的临时文件夹下。您可以通过file.LocalFileName检索临时文件的完整路径,然后使用相关的库来处理转换,然后保存PDF文件并删除临时文件,然后返回转换后的文件给客户。

<强>测试

enter image description here

此外,我建议您将文件存储在Azure Blob Storage下。你可以参考这个官方toturial开始使用它。