如何调试对ASP.NET Web API的XML调用
本文关键字:Web NET API 调用 XML ASP 何调试 调试 | 更新日期: 2023-09-27 18:00:36
我正在构建一个简单的ASP.NETWebneneneba 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()
时为null。
当我尝试调试该语句以查看它为什么不解析XML时,调用堆栈只包含对[External Code]
的引用。
我的问题是,如何调试POST
函数,以便找出它为什么不解析XML?
潜在问题:发生这种情况的一种情况是,如果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以供符号/服务器使用,请按照以下说明进行操作:
- 转到"工具"->"选项"->"调试器"->"常规"
- 取消选中"仅启用我的代码(仅限托管代码)"
- 取消选中"启用.NET Framework源代码步进"。是的,这是一种误导,但如果你不这样做,那么Visual Studio将忽略你的自定义服务器顺序(请参阅上的详细信息),只使用它自己的服务器
- 选中"启用源服务器支持"
- 取消选中"要求源文件与原始版本完全匹配"
- 转到"工具"->"选项"->"调试器"->"符号"
- 为本地符号/源缓存选择一个文件夹。如果符号不存在或由于某种原因是只读的,则在获取符号时可能会遇到静默失败
- 在"符号文件(.pdb)位置"下添加符号服务器。请注意正确的顺序,因为有些服务器可能包含相同二进制文件的符号:有源或无源。我们建议进行以下设置:
- http://referencesource.microsoft.com/symbols
- http://srv.symbolsource.org/pdb/Public或已验证的变体(见上文)
- http://srv.symbolsource.org/pdb/MyGet或已验证的变体(见上文)
- (具有源的其他符号服务器)
- http://msdl.microsoft.com/download/symbols
- (没有源的其他符号服务器)
您也可以构建&将您自己编译为Web API是开源的http://aspnetwebstack.codeplex.com/SourceControl/latest
在这种情况下有效的方法是在浏览器和服务器之间放置一个代理,并观察发生了什么。Hardcore使用Wireshark,但我发现这对于HTTP调试来说有点过头了。我知道3个选项:
- CharlesProxy(所有平台)
- 小提琴手(Windows)
- TCPMon(所有平台,已废弃)
通常你会在你的开发机器上添加代理,但我也成功地将它放在了服务器上(例如,监听端口81重定向到80)。