Как использовать внешний файл Json в качестве источника данных для webapi

Ниже приведен мой фрагмент кода, который отлично работает, мой запрос следует коду:

Модель:

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"}
        };
    }
}

Контроллер:

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

Вопрос: я хочу использовать внешний файл json (находящийся в папке app_data) для обслуживания тех же данных вместо выполнения new Context{sessionID=1,Name="Name1"}, как использовать данные, которые я считываю из файла json? Я очень новичок в MVC и webApi, поэтому будет очень полезно, если эксперты смогут опубликовать весь рабочий код или как можно больше деталей, пожалуйста.


person onlynitins    schedule 12.07.2015    source источник
comment
Так ты не умеешь читать файл? Или вы не знаете, как заполнить свойства вашей модели на основе json, который вы прочитали?   -  person Razvan Dumitru    schedule 12.07.2015
comment
Я не знаю, как заполнить свойства модели данными, считанными из внешнего файла json.   -  person onlynitins    schedule 13.07.2015


Ответы (1)


Вы можете вернуть HttpResponseMessage с файлом JSON, загруженным в 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
        };
    }
}

App_Data/contexts.json

[
    {
        "sessionId": 1,
        "name": "name1"
    },
    {
        "sessionId": 2,
        "name": "name2"
    },
    {
        "sessionId": 3,
        "name": "name3"
    }
]
person Martin    schedule 12.07.2015
comment
интересно, попробую. Подскажите, пожалуйста, как будет выглядеть модель в этом случае. - person onlynitins; 13.07.2015
comment
Он вернет ваш файл .json, поэтому будет возвращено все, что когда-либо было в вашем файле .json. Так что это должно содержать действительный json - person Martin; 13.07.2015
comment
Server.MapPath может не работать для некоторых пользователей, см. следующее решение: stackoverflow.com/a/11105933/3997521 - person petrosmm; 21.07.2016
comment
@Martin, спасибо за ответ, я новичок в .Net/C#, теперь я хотел использовать тот же ApiController для загрузки локального файла JSON, как я могу передать ApiController в URL-адресе AJAX, будет ли это /api/JsonFileController ? function loadColorPalette() { $.ajax({ url: '/api/JsonFileController', тип: 'GET', тип данных: json, успех: функция (данные) { console.log(успех, данные); }, ошибка: функция (ошибка) { console.error(ошибка, ошибка); } }); Я полагаю, это неправильный URL, не так ли? - person Mohammad Arif; 11.03.2017