我正在构建一个简单的ASP.NET Web API来接收和发布简单的数据传输对象(DTO)。
public TestDTO Get()
{
return new TestDTO();
}
public void Post([FromBody]TestDTO value)
{
var test = value.ToEntity();
}
TestDTO包含一个方法ToEntity()
,它将DTO转换为Entity对象。
我首先执行GET请求以获取示例DTO,然后将其POST回服务。当我在请求标头中指定Content-Type: application/json
时,一切正常。
但是,当我指定Content-Type: application/xml
时,我GET
示例TestDTO很好,但我尝试过的任何内容都不允许POST
工作。我只是在尝试调用value
时抱怨ToEntity()
为空时出现异常。
当我尝试调试语句以查看它为什么不解析XML时,调用堆栈只包含对[External Code]
的引用。
我的问题是,如何调试POST
函数,以便找出解析XML的原因?
答案 0 :(得分:1)
潜在问题:
发生这种情况的一种情况是,如果您使用字段而不是DTO的属性。在这种情况下,您需要使用[DataContract]
和带有[DataMember]
如果要调试Web API代码,可以使用symbolsource.org中的源包 https://www.symbolsource.org/Public/Wiki/Using
要配置Visual Studio以供符号/服务器使用,请按照以下说明操作:
你可以选择建立&编译自己,因为Web API是开源的 http://aspnetwebstack.codeplex.com/SourceControl/latest
答案 1 :(得分:0)
对于这种情况有效的方法是在您的浏览器和服务器之间放置一个代理,并观察正在发生的事情。硬核使用Wireshark,但我发现HTTP调试有点过分。在我脑海中,我知道3个选项:
通常你会在dev机器上添加代理,但我也成功将它放在服务器上(例如,在端口81上侦听以重定向到80)。