0

我对如何制作一个简单的 Azure 函数感到困惑。在 Visual Studio 2017(我使用的是 15.5.6 版)中,我按照此处的说明创建了一个简单的项目:https ://docs.microsoft.com/en-us/azure/azure-functions/functions-develop-vs

我的步骤:

  1. 创建新的 Azure Functions 项目并将框架保留为 .Net Framework 4.6.1 的默认值
  2. 在下一个屏幕上,我选择 HttpTrigger,下拉菜单显示“Azure Functions v1 (.NET Framework)”
  3. 我将存储设置为已在门户中创建的 Azure 存储,并将授权设置为“管理员”

一切都编译得很好。我通过 PostMan 调用该函数并收到此错误:

“执行函数时发生 ScriptHost 错误异常:Functions.Function1。Microsoft.Azure.WebJobs.Host:异常绑定参数‘log’。Microsoft.Azure.WebJobs.Host:没有为参数‘log’提供值。”

作为参考,这是他们创建的模板函数,我根本没有修改:

using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Azure.WebJobs.Host;

namespace TestFunc
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Admin, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            // 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;

            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);
        }
    }
}

如果我删除“TraceWriter 日志”和对“log.Info(....”的调用,然后再试一次,我会收到此错误:

“执行函数时发生 ScriptHost 错误异常:Functions.Function1。mscorlib:调用目标已引发异常。TestFunc:找不到方法:'System.Net.Http.HttpResponseMessage System.Net.Http.HttpRequestMessageExtensions。 CreateResponse(System.Net.Http.HttpRequestMessage,System.Net.HttpStatusCode,!!0)'。”

我尝试将 .Net 版本更改为 4.7,但没有任何改变。我尝试将功能版本更改为 v2 而不是 v1(即使它目前处于测试阶段),但也没有任何反应。模板添加的唯一 NuGet 包是 Microsoft.NET.Sdk.Functions 版本 1.0.6。有可用的 1.0.7 更新,但这也无济于事。

我不知道该尝试什么。这是默认模板。我有另一个运行良好的函数项目,但这是不久前 VS2015 是最新版本时完成的,当时您必须拥有这些 function.json 文件来制作预编译的 DLL。我希望能够使用当前的系统,因为它似乎是最好的前进方式,但如果我不能让它发挥作用,我可能会回到旧的做事方式。谢谢。

4

0 回答 0