来自 C# Web 中控制器的空 JSON 响应 API
Empty JSON Response from Controller in C# Web API
我正在学习如何在 C# 中构建 Web API。
我正在测试我的控制器,但是我得到一个空的 JSON
响应。
这是我的控制器
public class ClassInfoController : ApiController
{
private ClassRepository classRepo = new ClassRepository();
public IList<string> getClassListByTerm(string termID)
{
List<string> classList = classRepo.getClassListByTerm(termID);
return classList;
}
这是我的存储库 class,它查询我的实体模型
public class ClassRepository : IClass
{
private cet_databaseEntities db = new cet_databaseEntities();
public List<string> getClassListByTerm(string termID)
{
List<string> result = (from t in db.classCodeLookup
where t.termID == termID
orderby t.@class ascending
select t.@class).ToList<string>();
return result;
}
}
我已经调试了我的控制器,当调用 API 时,这个存储库 class returns 没有数据到控制器,即一个空的 list
。但是,我感到困惑的原因是,当我在存储库 class
上使用以下测试代码时
public class ClassRepositoryTests
{
ClassRepository testRepo = new ClassRepository();
[TestMethod()]
public void getClassListByTermTest()
{
List<string> output = testRepo.getClassListByTerm("316a");
foreach (string className in output)
{
Console.WriteLine(className);
}
}
}
我从存储库中得到结果 class 我期望。
为什么我会遇到这个问题?
尝试向您的 API 方法添加属性
[HttpGet]
public List<string> getClassListByTerm([FromUri]string termID)
或者您可以使用另一个 class 对象作为请求数据。
我是说
public class TermData
{
//use if nessassry [JsonProperty("TermId")]
public string TermId {get;set;}
}
[HttpGet]
public List<string> getClassListByTerm([FromUri]TermData data)
我的问题是 Visual Studio 中的 Web API 项目提供的自动 API 文档告诉我应该使用以下内容从浏览器调用我的控制器:http://localhost:51520/api/ClassInfo?termID={316a}
.我不知道,这意味着 {}
与 316a
保持一致 - 我认为它们就像方法签名中用于接收参数的括号一样,但我认为它们用于传递 list
/json
到一个方法(在这种情况下不相关)。这意味着当我的存储库查询 运行 时,它没有返回任何内容,因为我没有在寻找字符串 {316a}
.
如果我使用以下地址 http://localhost:51520/api/ClassInfo?termID=316a
调用 API 它会起作用,因为字符串 316a
已传递给查询。
谢谢大家
我有一个从 DynamicObject 继承的 class,那只会 return 清空 JSON(而 XML 似乎 return 正确)。
就我而言,我能够删除 DynamicObject 继承并且 JSON 序列化开始工作。
//didn't serialize to json, but xml worked
public MyClass : DynamicObject, IMyClass { //... }
//works for json and xml
public MyClass : IMyClass { //... }
不幸的是,我没有机会研究 DynamicObject
破坏 JSON 序列化的原因。
我正在学习如何在 C# 中构建 Web API。
我正在测试我的控制器,但是我得到一个空的 JSON
响应。
这是我的控制器
public class ClassInfoController : ApiController
{
private ClassRepository classRepo = new ClassRepository();
public IList<string> getClassListByTerm(string termID)
{
List<string> classList = classRepo.getClassListByTerm(termID);
return classList;
}
这是我的存储库 class,它查询我的实体模型
public class ClassRepository : IClass
{
private cet_databaseEntities db = new cet_databaseEntities();
public List<string> getClassListByTerm(string termID)
{
List<string> result = (from t in db.classCodeLookup
where t.termID == termID
orderby t.@class ascending
select t.@class).ToList<string>();
return result;
}
}
我已经调试了我的控制器,当调用 API 时,这个存储库 class returns 没有数据到控制器,即一个空的 list
。但是,我感到困惑的原因是,当我在存储库 class
public class ClassRepositoryTests
{
ClassRepository testRepo = new ClassRepository();
[TestMethod()]
public void getClassListByTermTest()
{
List<string> output = testRepo.getClassListByTerm("316a");
foreach (string className in output)
{
Console.WriteLine(className);
}
}
}
我从存储库中得到结果 class 我期望。
为什么我会遇到这个问题?
尝试向您的 API 方法添加属性
[HttpGet]
public List<string> getClassListByTerm([FromUri]string termID)
或者您可以使用另一个 class 对象作为请求数据。 我是说
public class TermData
{
//use if nessassry [JsonProperty("TermId")]
public string TermId {get;set;}
}
[HttpGet]
public List<string> getClassListByTerm([FromUri]TermData data)
我的问题是 Visual Studio 中的 Web API 项目提供的自动 API 文档告诉我应该使用以下内容从浏览器调用我的控制器:http://localhost:51520/api/ClassInfo?termID={316a}
.我不知道,这意味着 {}
与 316a
保持一致 - 我认为它们就像方法签名中用于接收参数的括号一样,但我认为它们用于传递 list
/json
到一个方法(在这种情况下不相关)。这意味着当我的存储库查询 运行 时,它没有返回任何内容,因为我没有在寻找字符串 {316a}
.
如果我使用以下地址 http://localhost:51520/api/ClassInfo?termID=316a
调用 API 它会起作用,因为字符串 316a
已传递给查询。
谢谢大家
我有一个从 DynamicObject 继承的 class,那只会 return 清空 JSON(而 XML 似乎 return 正确)。
就我而言,我能够删除 DynamicObject 继承并且 JSON 序列化开始工作。
//didn't serialize to json, but xml worked
public MyClass : DynamicObject, IMyClass { //... }
//works for json and xml
public MyClass : IMyClass { //... }
不幸的是,我没有机会研究 DynamicObject
破坏 JSON 序列化的原因。