如何使用外部Json文件作为webapi的数据源

onl*_*ins 5 json asp.net-web-api

以下是我的代码片段工作正常,我的查询遵循代码:

模型:

namespace CVHub.Models
{
    [DataContract]
    public class Context
    {
        [DataMember]
        public int sessionID { get; set; }
        [DataMember]
        public string Name { get; set; }

        public static List <Context> Contexts= new List<Context>
        {

            new Context{sessionID=1,Name="Name1"},
            new Context {sessionID=2,Name="Name2"},
            new Context {sessionID=3,Name="Name3"}
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

namespace CVHub.Controllers
{
    public class ContextController : ApiController
    {
        List<Context> items;
        // GET api/values
        public IEnumerable<Context> Get()
        {
            //return Context.Contexts;
            return items;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题:我想使用外部json文件(驻留在app_data文件夹中)来提供相同的数据而不是new Context{sessionID=1,Name="Name1"}, 如何使用我从json文件中读取的数据?我是MVC和webApi的新手,所以如果专家可以发布整个工作代码或尽可能多的详细信息,那将是非常有帮助的.

Mar*_*tin 7

您可以在HttpResponseMessage加载JSON文件的情况下 返回a StringContent.

public class JsonFileController : ApiController
{
    public HttpResponseMessage Get()
    {
        var json = File.ReadAllText(Server.MapPath(@"~/App_Data/contexts.json");

        return new HttpResponseMessage()
        {
            Content = new StringContent(json, Encoding.UTF8, "application/json"),
            StatusCode = HttpStatusCode.OK
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

App_Data文件/ contexts.json

[
    {
        "sessionId": 1,
        "name": "name1"
    },
    {
        "sessionId": 2,
        "name": "name2"
    },
    {
        "sessionId": 3,
        "name": "name3"
    }
]
Run Code Online (Sandbox Code Playgroud)