如何调试ASP.NET Web API的XML调用?

时间:2014-04-29 09:58:32

标签: c# xml asp.net-web-api

我正在构建一个简单的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的原因?

2 个答案:

答案 0 :(得分:1)

潜在问题: 发生这种情况的一种情况是,如果您使用字段而不是DTO的属性。在这种情况下,您需要使用[DataContract]和带有[DataMember]

的字段来装饰班级

更多信息:http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#xml_media_type_formatter

如何调试

如果要调试Web API代码,可以使用symbolsource.org中的源包 https://www.symbolsource.org/Public/Wiki/Using

配置Visual Studio

要配置Visual Studio以供符号/服务器使用,请按照以下说明操作:

  1. 转到工具 - >选项 - >调试器 - >一般
  2. 取消选中“仅启用我的代码(仅管理)”。
  3. 取消选中“启用.NET Framework源步进”。是的,这是误导性的,但如果您不这样做,那么Visual Studio将忽略您的自定义服务器订单(请参阅下文),并仅使用它自己的服务器。
  4. 选中“启用源服务器支持”。
  5. 取消选中“要求源文件与原始版本完全匹配”
  6. 转到工具 - >选项 - >调试器 - >符号。
  7. 选择本地符号/源缓存的文件夹。如果符号不存在或由于某种原因是只读符号,您可能会遇到无声失败。
  8. 在“符号文件(.pdb)位置”下添加符号服务器。请注意正确的顺序,因为某些服务器可能包含相同二进制文件的符号:有或没有来源。我们建议使用以下设置:
  9. 你可以选择建立&编译自己,因为Web API是开源的 http://aspnetwebstack.codeplex.com/SourceControl/latest

答案 1 :(得分:0)

对于这种情况有效的方法是在您的浏览器和服务器之间放置一个代理,并观察正在发生的事情。硬核使用Wireshark,但我发现HTTP调试有点过分。在我脑海中,我知道3个选项:

通常你会在dev机器上添加代理,但我也成功将它放在服务器上(例如,在端口81上侦听以重定向到80)。