我在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),尚未发现网上发布过类似案例。
有人知道为什么会这样吗?
答案 0 :(得分:0)
我测试了您的代码,但没有发现您提到的问题。
正如评论中提到的krishg一样,您需要检查本地代码是否已更改为发布请求。
有关请求正文为空的问题,请参考this。如果无法解决,请尝试在另一个Location
中创建一个新的功能应用。