如何更改模型绑定名称

时间:2018-05-24 12:01:35

标签: asp.net asp.net-core asp.net-core-2.0

我有一个像这样的InputModel:

smtp-id

但我真正想要的是将ModelBinder绑定到 { "email":"john.doe@sendgrid.com", "timestamp": 1337197600, "smtp-id":"<4FB4041F.6080505@sendgrid.com>", "sg_event_id":"sendgrid_internal_event_id", "sg_message_id":"sendgrid_internal_message_id", "event": "processed" }, ,因为这是数据从SendGrid到达的方式。

这可能吗?

这是发布的内容:

write

3 个答案:

答案 0 :(得分:2)

您可以使用JsonProperty属性装饰您的媒体资源,如下所示:

public class InputModel{
    [JsonProperty("first_name")]
    public string FirstName{get;set;}
}

它适用于序列化和反序列化。

答案 1 :(得分:0)

此问题正在此处进行跟踪:here

看来这将在未来版本中更新。与此同时,这有效:

[ModelBinder(Name = "smtp-id")]

答案 2 :(得分:0)

ASP.NET Core 3.0 以后默认使用 System.Text.Json 而不是 Newtonsoft.Json(又名 Json.NET),所以你应该使用 JsonPropertyName 属性:

using System.Text.Json.Serialization;

public class InputModel
{
   [JsonPropertyName("smtp-id")]
   public string SmtpId { get; set; }
}

如果你仍然想使用 Newtonsoft.Json,你必须:

  1. 安装 Microsoft.AspNetCore.Mvc.NewtonsoftJson 包
dotnet add package Microsoft.AspNetCore.Mvc.NewtonsoftJson
  1. 将 Newtonsoft.Json 设置为 Startup.cs 中的默认输入/输出格式化程序
public class Startup
{
   ...

   public void ConfigureServices(IServiceCollection services)
   {
      services.AddControllers().AddNewtonsoftJson();
      ...
   }

   ...
}