ASP.NET Core上に構築されたASP.NET Zeroに取り組んでいます。ページの1つで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から拡張せずに、コントローラーの基本クラスを使用するだけでも試しました。うまく行かなかった。
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);
Shyjuの回答に基づくajax呼び出しとビューの更新:
$("#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
X-XSRF-TOKEN
を使用してヘッダーを指定してください。
ABP Intercept XMLHttpRequest の場合。
すべてのライブラリはJavaScriptのネイティブAJAXオブジェクト、XMLHttpRequestを使用するため、単純なインターセプターを定義して、トークンをヘッダーに追加できます。
(function (send) {
XMLHttpRequest.prototype.send = function (data) {
this.setRequestHeader(abp.security.antiForgery.tokenHeaderName, abp.security.antiForgery.getToken());
return send.call(this, data);
};
})(XMLHttpRequest.prototype.send);
abp.security.antiForgery.tokenHeaderName
の場合、デフォルト値はX-XSRF-TOKEN
です。