Конечная точка API ASP.NET MVC 4 не отвечает - PullRequest
0 голосов
/ 22 февраля 2019

Я новичок в ASP.NET MVC4, и у меня есть проблема, которую мне не удается решить.

У меня есть простая конечная точка GET, которой я хочу вернуть все prestations.

Когда я пытаюсь достичь этой конечной точки, я не получаю ответа и даже таймаута.Мой API работает хорошо в других конечных точках.

Вот код внутри метода, связанного с этой конечной точкой:

[Route("api/Prestations")]
// GET: api/Prestations
/// <summary>
/// Liste de toutes les prestations
/// </summary>
/// <returns></returns>
[ResponseType(typeof(List<Prestation>))]
public List<Prestation> GetPrestations()
{
    return db.Prestations.ToList();
}

Я просто не могу понять, почему это не работает.

Некоторая помощь будет высоко оценена.

Спасибо!

Ответы [ 4 ]

0 голосов
/ 01 марта 2019

Если данные огромны, а загрузка не работает, то удалите .ToList() из возвращаемого значения db.Prestations.ToList(); в качестве возвращаемого значения db.Prestations;, чтобы избежать выполнения загрузки данных в качестве отсрочки при циклическом просмотре (если вы используете эту модель ввид).

0 голосов
/ 26 февраля 2019

Я наконец-то обошёл решение, мне пришлось создать ViewModel, чтобы вернуть список и поместить только Имя prestations и Id.

Вот мой недавно созданный класс:

public class PrestationResultNormal
{
    public List<ItemPrestation> prestations;


    public PrestationResultNormal(List<Prestation> prestations)
    {
        this.prestations = prestations.Select(x => new ItemPrestation()
        {
            IdPrestation = x.IdPrestation,
            NomPrestation = x.NomPrestation
        }).ToList();
    }
}

Спасибо за помощь!:)

и теперь в моем методе я делаю:

var prestations = db.Prestations.ToList();

return new PrestationResultNormal(prestations);
0 голосов
/ 27 февраля 2019

Я думаю, что это должно работать:

[System.Web.Http.HttpGet]
[System.Web.Http.ActionName(nameof(GetPrestations))]
public HttpResponseMessage GetPrestations()
{
            // var result db.Prestations.ToList();
            var result = new List<Prestations>()
        {
            new Prestations(){
                IdPrestation = 3,
                NomPrestation = "blah1"
            },
            new Prestations(){
                IdPrestation = 4,
                NomPrestation = "blah2"
            }
        };
    return Request.CreateResponse(HttpStatusCode.OK, result);
}

public class Prestations
{
    public int IdPrestation { get; set; }

    public string NomPrestation { get; set; }
}

Если приведенный выше код работает для вас, попробуйте раскомментировать var result db.Prestations.ToList(); и использовать его вместо этого.Обе вещи должны работать.

0 голосов
/ 26 февраля 2019

Согласно этой статье Обработка больших строковых значений JSON в .NET и предотвращение исключений вы можете попытаться увеличить размер возвращаемой строки JSON, изменив web.config:

<configuration>  
   <system.web.extensions>
       <scripting>
           <webServices>
               <jsonSerialization maxJsonLength="86753090" />
           </webServices>
       </scripting>
   </system.web.extensions>
</configuration> 

Также вы можете попытаться сериализовать результат с помощью Newtonsoft.Json и вернуться в качестве содержимого, чтобы увидеть, работает ли он.

[ResponseType(typeof(List<Prestation>))]
public ActionResult GetPrestations()
{
    var presentations = db.Prestations.ToList();
    return Content(JsonConvert.Seriazlize(presentations), "application/json");
}

Но в целом вы не захотитевернуть данные из всей таблицы клиенту, потому что она может быть огромной и содержать миллионы записей.Таким образом, вы бы предпочли реализовать нумерацию страниц:

[ResponseType(typeof(List<Prestation>))]
public List<Prestation> GetPrestations(int skip = 0, int take = 100)
{
    return db.Prestations.OrderBy(p => p.IdPrestation).Skip(skip).Take(take).ToList();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...