Web Api 返回空响应
Posted
技术标签:
【中文标题】Web Api 返回空响应【英文标题】:Web Api returning empty response 【发布时间】:2019-02-13 03:13:05 【问题描述】:我正在尝试从我的 api 方法返回以下模型,但它返回的是空响应。
[DataContract]
public class MasterData
public IEnumerable<PROFILE> lstProfile get; set;
public IEnumerable<COMPETENCE> lstCOMPETENCE get; set;
public IEnumerable<TB> lstTB get; set;
public MasterData()
回应:
<MasterData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/WB.Q.Models"/>
当我调试 web api 方法时,我可以在 return 语句中看到正确形成的响应,但我没有得到它作为响应
动作
[HttpGet]
[Route("api/Common/AllMasterData")]
public MasterData GetAllMasterData()
MasterData mstrData=new MasterData();
mstrData = Helper.GetAllMasterData();
return mstrData;
辅助方法
internal static MasterData GetAllMasterData()
MasterData masterData = new MasterData();
DataSet ds = DBHelper.GetData("aaa", null);
List<COMPETENCE> lstCompetence = new List<COMPETENCE>();
if (ds != null && ds.Tables.Count > 0)
foreach (DataRow drow in ds.Tables[0].Rows)
Adding in list
masterData.lstCOMPETENCE = lstCompetence;
ds = DBHelper.GetData("bbb", null);
List<PROFILE> lstPROFILE = new List<PROFILE>();
if (ds != null && ds.Tables.Count > 0)
foreach (DataRow drow in ds.Tables[0].Rows)
Adding in list
masterData.lstProfile = lstPROFILE;
ds = DBHelper.GetData("zzz", null);
List<TBSite> lstTBSite = new List<TBSite>();
if (ds != null && ds.Tables.Count > 0)
foreach (DataRow drow in ds.Tables[0].Rows)
Adding in list
masterData.lstTBSite = lstTBSite;
return masterData;
如果我从 Modal 中删除 DataContract,我会遇到以下错误:
The 'ObjectContent`1' type failed to serialize the response body for content type 'application/xml; charset=utf-8'.
如果我们将对象集合作为属性,是否必须使用 DataContract 和 DataMember?
【问题讨论】:
动作是什么? 【参考方案1】:如果您像这样使用DataContract
,那么我相信您还需要在回复中使用DataMember
标记您想要的所有内容:
[DataContract]
public class MasterData
[DataMember]
public IEnumerable<PROFILE> lstProfile get; set;
[DataMember]
public IEnumerable<COMPETENCE> lstCOMPETENCE get; set;
[DataMember]
public IEnumerable<TB> lstTB get; set;
public MasterData()
我自己也犯过这个错误......大概有六次了:)
或者,您可以省略 DataContract
属性,所有内容都应该可以正常序列化。
【讨论】:
我认为我们不需要为 webapi 指定 datacontract 和 datamember @JEMI - 我认为你是对的,但如果你做指定 DataContract,那么我相信你也必须使用 DataMember。 我是否需要将 DataMember 添加到每个类(模态),例如 TB、Profile? @F11 我建议你从你的类中删除 DataContract ,Web API 将在内部处理。 @F11 - 如果这些类也标有 DataContract,那么可以。或者,您可以完全省略 DataContract 属性,并且所有内容都应该像 JEMI 提到的那样很好地序列化。以上是关于Web Api 返回空响应的主要内容,如果未能解决你的问题,请参考以下文章
SonataUserBundle Api 响应返回空 JSON
Facebook Graph API返回页面事件的空数据响应[重复]
API 请求在 Postman 上完美运行,但返回空正文以响应 Mulesoft API