Я работаю над ASP.NET Zero, который построен на ASP.NET Core.
Когда я использовал элемент управления загрузкой KendoUI на одной из моих страниц, я получил ошибку неверного запроса. После долгих исследований я понял, что запрос HTTP POST Ajax не выполняется с ошибкой 400 неверных запросов. В приведенных ниже примерах кода есть несколько комментариев для других тестируемых сценариев. Ни один из существующих постов в стеке над потоком не решил мою проблему. Ниже приведен мой вызов ajax:
$.ajax({
url: "/test/TestCall",
type: 'Post',
/* data: JSON.stringify({ "Param1": "test" }),
dataType:"json",
processData: false, */// tell jQuery not to process the data
contentType: "application/json", // tell jQuery not to set contentType
success: function (result) {
var res = result;
},
error: function (jqXHR) {
var z = 3;
},
complete: function (jqXHR, status) {
var x = 10;
}
});
Мой код контроллера: я также пытался не выходить за пределы MyTestProjectControllerBase и просто использовать базовый класс Controller. Это не сработало.
public class TestController : MyTestProjectControllerBase
{
public IActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult TestCall()
{
//return Content("Name is:" );
return new ContentResult() { Content = "test" };
}
}
Чего мне не хватает? Я пытался использовать почтальон, и я вижу эту дополнительную информацию
«Запрос не может быть выполнен из-за неправильного синтаксиса»
не смог разобраться, потратив 8 часов на эту проблему. Не уверен, что проблема связана с ядром Asp.net или нулем asp.net. Любые указатели будут с благодарностью.
Обновление после проверки комментариев по shyju:
Файл Startup.cs содержит следующий код, который включает AntiForgeryTokenAttribute
services.AddMvc(options =>
{
options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
Обновление вызова и просмотра ajax на основе ответа shyju:
$("#backBtn").on("click", function (e) {
var t = $("input[name='__RequestVerificationToken']").val();
$.ajax({
url: "/test/TestCall",
type: 'Post',
/* data: JSON.stringify({ "Param1": "test" }),
dataType:"json",
processData: false, */
contentType: "application/json",
headers: {
"RequestVerificationToken": t
},
success: function (result) {
var res = result;
},
error: function (jqXHR) {
var z = 3;
},
complete: function (jqXHR, status) {
var x = 10;
}
});
});
Мой взгляд теперь выглядит так: удален остаток HTML
<div id="container">
@Html.AntiForgeryToken()
<div class="k-edit-field label">Vendor Name</div>
</div