【发布时间】:2020-03-29 12:08:28
【问题描述】:
不确定我的请求有什么问题,但控制器操作显然没有收到我的帖子。我想使用防伪令牌发布此表单,并且我还想使用 ajax 请求。出于这个原因,我没有使用包含防伪令牌的默认 aspnet 核心表单,而是使用了 html 助手@Html.AntiforgeryToken()。知道问题出在哪里吗?
@model RunViewModel
@{
ViewData["Title"] = "Run";
}
<h1 class="text-info">@ViewData["Title"]</h1>
<form id="run-form">
@Html.AntiForgeryToken()
<div class="form-group">
<label asp-for="InstanceName"></label>
<input asp-for="InstanceName" class="form-control" placeholder="Enter an instance name here..." />
</div>
<div class="form-group">
<label asp-for="DatabaseName"></label>
<input asp-for="DatabaseName" class="form-control" placeholder="Enter a database name here..." />
</div>
<div class="form-group">
<label asp-for="FolderPath"></label>
<input asp-for="FolderPath" class="form-control" />
</div>
<div class="col-3 offset-4">
<button type="submit" class="btn btn-primary">Run!</button>
</div>
</form>
@section Scripts {
<script>
$("#run-form").submit(function () {
var data = $('#run-form').serializeArray();
console.log(data);
alert($('input:hidden[name="__RequestVerificationToken"]').val());
$.ajax({
type: 'POST',
url: '/Run/Run',
contentType: 'application/json',
headers: { RequestVerificationToken: $('input:hidden[name="__RequestVerificationToken"]').val() },
data: JSON.stringify(data),
success: function (data) {
if (data.status = "success") {
alert("Database has been updated !"); //TODO : Mettre un div vert avec un message à la place.
}
},
error: function () {
alert("An error occured 2!"); //TODO : Mettre un div rouge avec un message à la place.
}
});
//event.preventDefault();
});
</script>
}
控制器部分是:
[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Run(string jsonObj)
{
//TODO : CHECK JSONOBJ
RunViewModel model = JsonSerializer.Deserialize<RunViewModel>(jsonObj);
try
{
//Call a service here...
}
catch (Exception ex)
{
//Renvoyer un message
}
return Json(model);
}
视图模型是:
public class RunViewModel
{
[Required]
[Display(Name="Instance name : ")]
public string InstanceName { get; set; }
[Required]
[Display(Name="Database name : ")]
public string DatabaseName { get; set; }
[Required]
[Display(Name="SQL folder path : ")]
public string FolderPath { get; set; }
/// <summary>
/// Liste ordonnée des fichiers, regroupés par version, à lancer sur la base de données suivant la version actuelle de la base de données.
/// </summary>
public IOrderedEnumerable<IGrouping<Version, string>> SqlFilesGroupedByVersion { get; set; }
}
【问题讨论】:
标签: c# jquery asp.net-core asp.net-core-mvc asp.net-core-webapi