ASP.NET Core 2.0请求失败

时间:2018-09-05 17:49:08

标签: c# jquery asp.net-core-2.0

我具有以下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中,我收到“失败的请求: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 :(得分:1)

如我所见,这将是以下两件事之一:

  1. 您可能没有在JavaScript代码中获得StatX,StatY和MeasurementDate值
  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和用户做什么?

答案 1 :(得分:0)

2天后我找到了解决方案。问题是我忘记在Startup.cs中添加存储库服务,并且在错误的位置寻找解决方案。 API现在可以正常工作。感谢大家的时间和帮助。