【问题标题】:Azure Functions model binding issues in C#C# 中的 Azure Functions 模型绑定问题
【发布时间】:2020-02-10 11:47:05
【问题描述】:

我想使用 Azure Functions 并像在典型的 ASP.NET WebAPI 项目中那样自动解析模型。 所以,我写:

[FunctionName("StartJob")]
public async Task<IActionResult> Start(
    [HttpTrigger(AuthorizationLevel.Function, "Post", Route = "v1/job")] StartJobRequestModel model)
{
    this.logger.LogInformation("StartJob function has been entered.");
}

public class StartJobRequestModel
{
    [JsonRequired]
    public string TenantId { get; set; }
    ....
}

因此,您希望,如果您不提供必需的 TenantId 字段,基于此代码,在底层 JSON 反序列化期间,程序甚至不应该进入函数体。 但它的作用是:

记录 json 反序列化错误

[2/10/2020 10:59:14 AM] 请求成功匹配名称为“StartJob”和模板为“api/v1/job”的路由

[2/10/2020 10:59:14 AM] JSON 输入格式化程序引发异常。

[2020 年 2 月 10 日上午 10:59:14] Newtonsoft.Json:在 JSON 中找不到必需的属性“tenantId”。路径 '',第 16 行,位置 1。

[2/10/2020 10:59:14 AM] 执行“StartJob”(原因='此函数已通过主机 API 以编程方式调用。',Id=22be443b-9a70-4570-8a30-1cc9b8062f1b)

[2/10/2020 10:59:16 AM] StartJob 函数已进入。

在收到非预期模型后继续工作,没有任何意外异常问题...

问题是:

  1. 这是正常行为吗?
  2. 也许我需要在项目配置或 Startup.cs 中指定一些特定参数?
  3. 微软的错误?
  4. ???
  5. 不盈利?

谢谢。

【问题讨论】:

  • 您找到解决方案了吗?我目前正面临完全相同的问题。
  • @Nfourx 嗨,我使用 FluentValidator 并完全控制它......我将来可能会测试新的 Azure Functions 5,但我认为它不会得到解决。虽然,在新函数中,您已经可以编写自己的中间件并自己解析这些东西......

标签: c# json json.net azure-functions


【解决方案1】:

不确定您是哪个版本的 NewtonSoft.Json,但通常我使用 JsonProperty 属性而不是 JsonRequired 属性,它按预期工作:

public class StartJobRequestModel
{
    [JsonProperty(Required = Required.Always)]
    public string TenantId { get; set; }
    ....
}

【讨论】:

  • 你也可以使用[JsonProperty(Required = Required.DisallowNull)]
  • 不是和JsonRequired一样吗?不过对我来说也一样...
  • Sdk.Functions 使用的版本 - 11.0.2
  • [JsonProperty(Required = Required.DisallowNull)] - 当你不提供属性时,这个甚至不记录错误......
猜你喜欢
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-31
  • 2021-03-10
相关资源
最近更新 更多