Azure functions Azure函数V3 httptriggered:路由参数覆盖正文中的属性

Azure functions Azure函数V3 httptriggered:路由参数覆盖正文中的属性,azure-functions,Azure Functions,因此,我有一个http触发的AzureFunction(v3),如下所示: [FunctionName(nameof(UpdateItemAsync))] public async Task<IActionResult> UpdateItemAsync( [HttpTrigger(AuthorizationLevel.Function, HttpMethodNames.Put, Route = "items/{id}")] UpdateItemRe

因此,我有一个http触发的AzureFunction(v3),如下所示:

[FunctionName(nameof(UpdateItemAsync))]
public async Task<IActionResult> UpdateItemAsync(
    [HttpTrigger(AuthorizationLevel.Function, HttpMethodNames.Put, Route = "items/{id}")]
    UpdateItemRequest input, Guid id, ILogger log)
{
    if (input.Id != id) return BadRequest();

    var result = await _itemsService.UpdateAsync(input);
    return Ok(result);
}
[FunctionName(nameof(UpdateItemAsync))]
公共异步任务UpdateItemAsync(
[HttpTrigger(AuthorizationLevel.Function,HttpMethodNames.Put,Route=“items/{id}”)]
UpdateItemRequest输入、Guid id、ILogger日志)
{
如果(input.Id!=Id)返回BadRequest();
var result=wait_itemsService.UpdateAsync(输入);
返回Ok(结果);
}
我知道,在路由和请求主体中使用id可能并不常见,但我们现在就在这里。 它基本上计划成为一个“安全网”,以防止客户端错误(我不是架构师,只是被分配了以下问题)

现在出现了一件奇怪的事情:在我的测试中,这从来没有触发过“坏请求”

事实证明,如果“body对象”的属性与route参数同名(不区分大小写),则body中的属性将在任何验证之前设置为route param值

到目前为止,这是我发现的。现在我的问题是:

是否有人知道一种方法,使我可以保持两个名称不变,但对该项目中的所有函数禁用此行为?


因为这是我的要求。“不,那是不可能的”也是一个可行的答案,因此我可以自信地回击。

我发现了一个似乎正是我所面临的问题:

答案(截至目前)是:

到目前为止,此方案还不受支持。但是,我将把它作为一个特性请求添加进来,以便将来能够完成


您是否尝试过手动绑定到
HttpRequest
并解析其
Body
?为什么不更改这两个属性的名称?我知道您不想更改请求正文中的属性名称,但我不知道您为什么不更改
路由中的
{id}
。在我看来,我们可以在
路线
中使用任何名称(如
{xx}
{yy}
),这不会有任何区别。@HuryShen如果只是我,我可能会这么做。问题是,这不是我的决定。@StephenCleary我想那会有用的。问题是,我想知道我们是否可以避免这种情况。此外,无论这是它实际应该如何工作,或者我是否应该向微软提交一个bug,或者是否有一个选项或任何东西可以改变这种行为。只有在我能够确认这是它应该如何工作并且没有办法的情况下,我才被允许更改签名。^^。。。我还没有找到关于这种特定行为的文档。