Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure函数在C中的模型绑定问题#_C#_Json_Json.net_Azure Functions - Fatal编程技术网

C# Azure函数在C中的模型绑定问题#

C# Azure函数在C中的模型绑定问题#,c#,json,json.net,azure-functions,C#,Json,Json.net,Azure Functions,我想使用Azure函数,并像典型的ASP.NET WebAPI项目那样自动解析模型。 因此,我写道: [FunctionName("StartJob")] public async Task<IActionResult> Start( [HttpTrigger(AuthorizationLevel.Function, "Post", Route = "v1/job")] StartJobRequestModel mo

我想使用Azure函数,并像典型的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; }
    ....
}
[FunctionName(“StartJob”)]
公共异步任务启动(
[HttpTrigger(AuthorizationLevel.Function,“Post”,Route=“v1/job”)]StartJobRequestModel模型)
{
此.logger.LogInformation(“已输入StartJob函数”);
}
公共类StartJobRequestModel
{
[JsonRequired]
公共字符串TenantId{get;set;}
....
}
因此,如果您不提供required
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”(Reason='此函数是通过主机API编程调用的。',Id=22be443b-9a70-4570-8a30-1cc9b8062f1b)

[2/10/2020 10:59:16 AM]已输入StartJob功能

并在收到不期望的模型后继续工作,不会出现任何问题和意外异常

问题是:

  • 这是正常的行为吗
  • 也许我需要在project的config或Startup.cs中指定一些特定的参数
  • 微软的漏洞
  • 不盈利

  • 谢谢。

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

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

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

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

    您还可以使用[JsonProperty(Required=Required.DisallowNull)],它与JsonRequired不一样吗?不过,对我来说也是一样的…版本是Sdk使用的。函数-11.0.2[JsonProperty(Required=Required.DisallowNull)]-当您不提供属性时,这个版本甚至不会记录错误…您也可以使用[JsonProperty(Required=Required.DisallowNull)],它与JsonRequired不一样吗?对我来说也是一样的,不过…Sdk.Functions使用的版本-11.0.2[JsonProperty(Required=Required.DisallowNull)]-当您不提供属性时,这个版本甚至不会记录错误。。。