Сбой запроса ASP.NET Core 2.0 - PullRequest
       2

Сбой запроса ASP.NET Core 2.0

0 голосов
/ 05 сентября 2018

У меня есть следующий контроллер API:

        [HttpPost]
        public async Task Post([FromBody]Statistics value)
        {
            if(_user == null) _user = await _userManager.GetUserAsync(HttpContext.User);
            if(_user.Statistics == null) _user.Statistics = new List<Statistics>();
            _user.Statistics.Add(value);
            Context.SaveChanges();
        }

Я пытаюсь отправить некоторые данные:

$("#submit-button-clicked").click(function () {
            $.ajax({
                url: 'api/Statistics ',
                type: 'POST',
                dataType: "json",
                contentType: 'application/json',
                data: JSON.stringify({
                    StatX: document.getElementById("input-statisticsX").value,
                    StatY: document.getElementById("input-statisticsY").value,
                    MeasurementDate: document.getElementById("input-datetime").value
                }),
                success: function (data) {
                    location.reload();
                }
            });
        });

Но запрос терпит неудачу (в Visual Studio я получаю «Failed Requests: 1». Я думаю, что маршрутизация работает, поскольку она не показывает, что запрос не выполнен, так что, возможно, это проблема с разбором данных?. В чем может быть проблема? ( input-statisticsX и input-statisticsY - это просто числа).

*** Класс статистики выглядит так:

 public class Statistics
    {
        [Key]
        public int Id { get; set; }
        public virtual ApplicationUser ApplicationUser { get; set; }
        public int StatX { get; set; }
        public int StatY { get; set; }
        public DateTime MeasurementDate { get; set; }
    }

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Я нашел решение через 2 дня. Проблема заключалась в том, что я забыл добавить службу репозитория в Startup.cs и искал решение в неправильном месте. API теперь работает нормально. Спасибо всем за ваше время и помощь.

0 голосов
/ 06 сентября 2018

Как я вижу, это будет одна из следующих двух вещей:

  1. Либо вы не получаете значения StatX, StatY и MeasurementDate прямо в своем коде JavaScript
  2. Или для вас отсутствуют атрибуты маршрутизации. Метод сообщения

Я покажу вам пример кода, как это можно сделать, поэтому проверьте ваш код, чтобы увидеть, что идет не так.

Итак, сначала я добавлю некоторые тестовые значения в представление Post:

<h2>statistics with ajax</h2>
<dl>
    <dt>Stat X</dt>
    <dd id="input-statisticsX">2</dd>
    <dt>Stat Y</dt>
    <dd id="input-statisticsY">3</dd>
    <dt>Measurement Date</dt>
    <dd id="input-datetime">2018-09-06 00:00:00.000</dd>
</dl>
<a id="submit-button">Statistics</a>

@section Scripts {

    <script src="~/js/ajaxTest.js"></script>
}

Затем в файле ajaxTest.js я проверю, получаем ли мы правильные значения из представления:

var value =
    {
        StatX: 0,
        StatY: 0,
        MeasurementDate: ""
    };

value.StatX = document.getElementById("input-statisticsX").innerHTML;
value.StatY = document.getElementById("input-statisticsY").innerHTML;
value.MeasurementDate = document.getElementById("input-datetime").innerHTML;

$("#submit-button").click(function () {
    $.ajax({
        url: 'api/statistics ',
        type: 'POST',
        dataType: "json",
        contentType: 'application/json',
        data: JSON.stringify(value),
        success: function (data) {
            location.reload();
        }
    });
});

И, наконец, в контроллере я напишу метод Post следующим образом:

[Route("api/statistics")]
[HttpPost]
public async Task Post([FromBody] Statistics value)
{
    var stats = new List<Statistics>();
    stats.Add(value);

    // and some other code ...
    var _user = await _userManager.GetUserAsync(HttpContext.User);
    // ...
}

Готово. Проверьте эти три шага в своем коде, и это все, что касается проблемы с анализом, которая может у вас возникнуть. Также не уверен, что вы хотите сделать с userManager и user?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...