【发布时间】:2015-01-07 15:05:44
【问题描述】:
我发现我们的一个 WebAPI 项目出现了一些奇怪的行为。其中一个资源有一个接受复杂 .Net 对象的 POST 操作,其中一个属性是这样的枚举:
public class MyComplexClass {
public string Prop1 { get; set; }
public MyEnum Val { get; set; }
}
public enum MyEnum {
Val1,
Val2
}
当我从另一个 .Net 项目调用此端点时,只要我的 WebAPI 项目已在 Debug 模式下编译和部署,它就可以正常工作。在我以 Release 模式编译它的那一刻,模型绑定开始表现得很奇怪。我的MyEnum 的值始终为Val1,即使我传入Val2 或1。我似乎无法解释这里发生了什么并且已经没有想法了。
编辑 我有一个助手可以序列化对象并将它们添加到正文并调用 WebAPI。我称之为类似于这样的东西:
client.Post<MyComplexClass, bool>(new MyComplexClass() { Prop1="Hello"; Val=MyEnum.Val2});
我在项目之间共享模型,并且在这种情况下,当我序列化它并在我的 Action 方法中接受它作为参数时,我使用相同的模型 MyComplexClass:
[HttpPost]
public bool UpdateUserPassword(MyComplexClass request)
{
Log(request.Val);
}
request.Val 的值根据是Debug还是Release模式编译不同。对于发布,它总是Val1 我猜是因为它被默认为 0 并将其解释为Val1
【问题讨论】:
-
奇怪的问题,但我认为我们需要MCVE 来提供帮助。
-
您是否尝试过跟踪服务以查看实际传递的内容。
-
调用者将正文中完全相同的一组值传递给 WebAPI。但是 WebAPI 似乎读取了枚举为 0 的属性,因此将其设置为 Val1。
-
你能举个例子吗?
-
你有没有试过看看当你通过 fiddler 调用端点时会发生什么?
标签: c# .net asp.net-mvc asp.net-mvc-4 asp.net-web-api