我具有以下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; }
}
答案 0 :(得分:1)
如我所见,这将是以下两件事之一:
我将向您展示一些示例代码,该操作如何完成,因此请查看您的代码以查看出了什么问题。
因此,我首先将一些测试值放入“发布”视图中:
<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现在可以正常工作。感谢大家的时间和帮助。