HTTP触发器azure函数不在本地运行时出现问题

问题描述

我在Visual Studio(C#)中有一个基本的HTTP触发器azure函数

[FunctionName("HttpTriggerCSharp")]
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 name = req.Query["name"];

string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
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");
}

但是我有2个问题:

(1)我只希望它接收“发布”请求。但是,当我从参数中取出"get"时,该函数不再在Azure中接收我的请求。我得到一个404 Not Found。但是在本地仍然可以收到我的请求,并且效果很好。

(2)此外,Azure中未收到请求的正文。它是空的。再次在本地运行时,不会发生此类问题。

我发现了几起有人遇到该问题的案例(2),但没有找到解决方法。关于问题(1),尚未发现网上发布过类似案例。

有人知道为什么会这样吗?

解决方法

我测试了您的代码,但没有发现您提到的问题。

正如评论中提到的krishg一样,您需要检查本地代码是否已更改为发布请求。

有关请求正文为空的问题,请参考this。如果无法解决,请尝试在另一个Location中创建一个新的功能应用。