簡體   English   中英

ASP.NET Core 2.0請求失敗

[英]ASP.NET Core 2.0 request failed

我有以下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”。我猜路由工作正常,因為它不會顯示請求失敗了,所以解析數據可能是問題嗎?。可能是什么問題?( 輸入- statisticsXinput-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; }
    }

如我所見,這將是以下兩件事之一:

  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和user做什么?

2天后我找到了解決方案。 問題是我忘記在Startup.cs中添加存儲庫服務,並且在錯誤的位置尋找解決方案。 API現在可以正常工作。 感謝大家的時間和幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM