来自 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 序列化的原因。