针对 .Net Standard 2.0 的新 VS Azure Function 项目因 InternalServerError 而失败

New VS Azure Function project targeting .Net Standard 2.0 fails with InternalServerError

我正在使用 Visual Studio 15.7.6 和 Azure Functions V2 和 Web Job Tools 15.0.40617.0,在我的开发机器上安装了 .Net Core SDK 2.1.302。

我可以创建一个新的 Azure Function 项目,以 .Net Standard 2.0 为目标,运行 它在本地很好。但是,当我将它部署到 Azure 并执行它时 returns 500 InternalServerError.

Visual Studio 模板生成以下模板代码:

using System.IO;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;

namespace FunctionApp1
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequest req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            string name = req.Query["name"];

            string requestBody = new StreamReader(req.Body).ReadToEnd();
            dynamic data = JsonConvert.DeserializeObject(requestBody);
            name = name ?? data?.name;

            return name != null
                ? (ActionResult)new OkObjectResult($"Hello, {name}")
                : new BadRequestObjectResult("Please pass a name on the query string or in the request body");
        }
    }
}

Visual Studio 是否与工具链版本不同步?

我注意到,如果我使用 C# 脚本 (CSX) 在线创建函数,则以下方法有效,但我不知道它使用的是哪个版本的函数:

using System.Net;
using System.Web;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    return req.CreateResponse(HttpStatusCode.OK, "Hello world!");
}

如果我添加 Microsoft.AspNetCore.Mvc 并尝试使用 IActionResults,它将无法编译。

我猜我遗漏了一些兼容性问题?

是否有使用 Functions V2 和 .Net Standard 在本地和 Azure 运行 次运行的示例 Visual Studio 项目?

-约翰

等等,我想我可能刚刚弄明白了。看起来新的 Azure Functions 默认为 v1 运行时(可以理解)。如果我将其更改为 "beta" 它有效。

我想post这样做是为了节省别人我花在这上面的时间。

我的解释正确吗?

-约翰