递归类型的ASP.Net响应为空
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了递归类型的ASP.Net响应为空,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1468字,纯文字阅读大概需要3分钟。
内容图文
![递归类型的ASP.Net响应为空](/upload/InfoBanner/zyjiaocheng/663/68ca1e1b837248c9bbd3c39c737720a3.jpg)
我正在编写一个Rest端点,由于某种原因,即使调试代码显示响应的内容已按我预期的那样定义,其余的调用自身仍返回空内容.对于类似的呼叫,相同的问题并未显现出来.最终,我意识到工作的调用与失败的调用之间的区别是,不成功的调用尝试返回递归(具有公共属性/类型的字段的类型)或相互递归的类型,而成功的调用则没有.作为遇到的问题的最小示例:
[RoutePrefix("")]
public class LoopyController
{
public class Loopy
{
public Loopy Self {get; set;}
}
[HttpGet]
[Route("loopy")]
public HttpResponseMessage LoopyCall()
{
Loopy loopy = new Loopy();
loopy.Self = loopy;
return Request.CreateResponse(loopy)
}
}
循环端点上的GET调用返回空响应.我希望它会挂起或引发异常.我想知道为什么ASP.Net表现出这种行为.我知道解决此问题的方法是修改返回值,以使它无论如何不再递归,但想知道是否有更干净的方法来解决此问题.
编辑:
评论中已经讨论了我对“递归类型”一词的使用.我有信心在https://en.wikipedia.org/wiki/Recursive_data_type年之前Loopy是一种递归类型.但是,问题不仅仅在于Loopy类型是递归的,而是对象Loopy具有循环引用.以下端点:
[HttpGet]
[Route("notsoloopy")]
public HttpResponseMessage NotSoLoopy()
{
Loopy notSoLoopy = new Loopy();
notSoLoopy.Self = null;
return Request.CreateResponse(notSoLoopy);
}
返回响应{}以回复GET请求.当然,Loopy是递归的,可以使Loopy具有循环引用.
解决方法:
这是一个循环参考.默认情况下,WebAPI json格式化程序设置为忽略循环引用.即使您使用的是XML,我也在思考(但不确定),无论如何都将忽略它. This article可能提供一些见解:
Json.net serializer (the serializer used in web api) supports to ignore circular reference on global
setting.
内容总结
以上是互联网集市为您收集整理的递归类型的ASP.Net响应为空全部内容,希望文章能够帮你解决递归类型的ASP.Net响应为空所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。