Web api 数据注释在传递时导致 500 服务器错误

Web api Data Annotations cause 500 server error when passed

我正在创建一个 Web api 项目并想为我的模型添加验证,因此我添加了一个 DataAnnotation 属性。

然后我通过尝试从一个单独的 mvc 项目传递我的对象来测试该项目。我收到 500 服务器错误。

删除 DataAnnotation 使我可以成功传递对象。为什么?

我看过一些教程,例如 this and this,它们展示了如何处理验证错误,但这并没有帮助。

更新

去掉Class1中MyProperty的数据注解,方案B(但留在方案A的class上)表示可以传值成功!这是反序列化对象的问题吗?如果是我该如何解决?

B = 我的网络服务正在接收对象

A = 我的 mvc 项目发送对象

我发送请求的代码

public class Class1
{
    [Required(ErrorMessage = "MyProperty  value is required")]//remove this line to make it work
    public int MyProperty { get; set; }
    public Class2 MyOtherProperty { get; set; }
}

public class Class2
{
    public string SomeProperty { get; set; }
}


    async Task<string> Test2()
    {
        var form = new Class1();
        form.MyProperty = 123;
        form.Class2 = new Class2();

        using (HttpClient client = new HttpClient())
        {
            client.BaseAddress = new Uri("http://localhost:58814/api/");
            var post = await client.PostAsJsonAsync<Class1>("Values", form);
            var putt = await client.PutAsJsonAsync<Class1>("Values", form);
        }
        return "";
    }

我接收请求的代码(应用的断点未命中)

    // POST api/values
    public void Post([FromBody]Class1 value)
    {

    }

    // PUT api/values/5
    public void Put([FromBody]Class1 value)
    {
    }

感谢 this link - Scott Hanselman's blog

的建议,我已经解决了这个问题

我的发送项目和接收项目具有相同的 classes(包括数据注释)。从接收项目中的 class 中删除注释解决了绑定问题,但我仍然需要对属性进行验证。还将注释从 required 更改为 Range 也解决了绑定问题(我只提到这些,因为它们是我尝试和调试的一些步骤)。

我的最终解决方案是改变这个

public class Network
{
    [Required(ErrorMessage = "NetworkID is required")]
    public int NetworkID { get; set; }
}

至此

[DataContract]
public class Network
{
    [DataMember(IsRequired = true)]
    public int NetworkID { get; set; }
}