【问题标题】:Possible to enforce [Required] on value types可以对值类型强制执行 [必需]
【发布时间】:2017-09-20 14:36:25
【问题描述】:

如果您将 [Required] 放在引用类型上,并提供没有匹配 JSON 属性的 JSON,则会引发错误。

除了使用可为空的值类型或在类中包装值类型之外,是否可以在反序列化对 Web API 的请求时对值类型强制执行 [Required]?

Required 不会在下面的 Test1 上强制执行,因为它被强制为默认值零。即,如果您的 JSON 不包含 Field1 属性,序列化仍会成功完成。

我希望能够将 [Required] 放在我的值类型上,或者可能编写一个新属性来完成此操作。

有这样的设置吗?或者,是否可以利用 XML 和 JSON 的反序列化来实现这一点?

public async Task<IHttpActionResult> Method1(Clas1 model){}

public class Class1
{
    ...

    [Required]
    public int Field1 { get; set; }
}

Although it may not be possible with attributes,理论上反序列化器可以在将值强制为值类型之前检查属性。如果是这样,是否有我可以做到这一点的事件或设置?

使用 Json.net,我可以添加一个属性 [JsonProperty(Required = Required.AllowNull)]。我可以为 XML 反序列化做类似的事情吗?

即:

// POST api/Account/Register
[AllowAnonymous]
[Route("Register")]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };

public class RegisterBindingModel  //: IValidatableObject
{
    [Required]
    public string Email { get; set; }

    public int Test1 { get; set; }

    [Required]
    public int Test3 { get; set; }

<RegisterBindingModel xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WebApplication1.Models">
  <Email>Sample string 2</Email>
  <Test1>2</Test1>
</RegisterBindingModel>

【问题讨论】:

  • 它不总是有价值的吗?当您实例化该类时,如果 Field1 未明确设置为其他值,则其值为 0。
  • 会的。但是如果没有明确提供 Field1,我想使 ModelState 无效并拒绝请求
  • 除了使用可空值类型 - 你为什么不考虑这种方法?
  • 我有一个很大的 API,不想把所有的原语都改成可以为空的类型。很难验证我不会影响业务需求
  • 改为可空或使用Range,我更喜欢使用Range。 stackoverflow.com/questions/6662976/…

标签: c# asp.net-web-api2 deserialization data-annotations c#-6.0


【解决方案1】:

如果知道范围,就可以使用 range 属性。

[Range(0, 99)]
public int Field1{ get; set; }

【讨论】:

  • 我正在寻找更强大的东西。我想强制请求显式提供属性
猜你喜欢
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多