c# - C# 中的 Azure Functions 模型绑定问题
问题描述
我想使用 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 输入格式化程序引发异常。
[2/10/2020 10:59:14 AM] 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 功能已进入。
并在收到非预期模型后继续工作而不会出现意外异常...
问题是:
- 这是正常行为吗?
- 也许我需要在项目的配置或 Startup.cs 中指定一些特定的参数?
- 微软的漏洞?
- ???
- 不盈利?
谢谢你。
解决方案
不确定您是哪个版本的 NewtonSoft.Json,但通常我使用 JsonProperty 属性而不是 JsonRequired 属性,它按预期工作:
public class StartJobRequestModel
{
[JsonProperty(Required = Required.Always)]
public string TenantId { get; set; }
....
}
推荐阅读
- python - 如何使用 flask-sqlalchemy 访问多个表?
- sql - 从内部连接中选择列
- iot - 物联网中的句法与语义互操作性
- java - 类型上的 CDI 抛出 NPE
- java - 如何解决 VScode UnsupportedClassVersionError?
- python-3.x - Python中是否有一个内置函数可以通过键直接获取嵌套字典的值?
- git - 克隆并分叉一个 repo 以在本地使用。当我 npm install 时,我收到一个错误:无法从远程存储库中读取
- sql - 如何更新外键?
- c# - 努力循环一个列表或数组 datagridviewrows,我如何循环一个 datagridviewrow 列表?
- dart - Flutter 和 Dart - 如何在一行代码中格式化整数日期