Javascript AJAX/ASP.NET核心MVC/DevExtreme回发返回错误的url(错误/错误?代码=22)
我在MVC应用程序中使用Ajax,在单击注销按钮时发回帖子。我想将用户发送回登录页面,并将其路由到控制器中的HttpPost metod。但是,在我的Ajax代码中,当我单击“注销”时出现错误:Javascript AJAX/ASP.NET核心MVC/DevExtreme回发返回错误的url(错误/错误?代码=22),javascript,ajax,asp.net-mvc,asp.net-core,devextreme,Javascript,Ajax,Asp.net Mvc,Asp.net Core,Devextreme,我在MVC应用程序中使用Ajax,在单击注销按钮时发回帖子。我想将用户发送回登录页面,并将其路由到控制器中的HttpPost metod。但是,在我的Ajax代码中,当我单击“注销”时出现错误:找不到此本地主机页未找到该网址的网页:http://localhost/myApp/Error/Error?code=22 PageHeader.cshtml ... items.Add() .Widget(w => w .Button() .Typ
找不到此本地主机页未找到该网址的网页:http://localhost/myApp/Error/Error?code=22
PageHeader.cshtml
...
items.Add()
.Widget(w => w
.Button()
.Type(ButtonType.Normal)
.StylingMode(ButtonStylingMode.Text)
.Text("Logout")
.ID("logoutbutton")
.OnClick("logoutOnClick")
)
.CssClass("toolbar-button")
.LocateInMenu(ToolbarItemLocateInMenuMode.Auto)
.Location(ToolbarItemLocation.After);
})
)
...
<script type="text/javascript">
function logoutOnClick () {
if (confirm('Are you sure you want to logout?')) {
$.ajax({
type: "POST",
url: '@Url.Action("Login", "Account")'
});
}
}
</script>
您必须修复ajax url:
url: "/MyApp/Account/Login",
我看不到任何数据:在ajax中
根据您的代码,因为您正在使用ValidateAntiForgeryToken属性来防止伪造请求。当使用jQueryAjax调用上述方法时,还应该在请求头中添加RequestVerificationToken
在Startup.ConfigureServices
方法中,配置反伪造服务:
//configure the antiforgery service to look for the X-CSRF-TOKEN header. To prevent the cross-site request forgery.
services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");
然后,在Login.cshtml页面的Ajax beforeSend函数中,设置RequestVerificationToken:
@model WebApplication6.Models.LoginModel
<div class="row">
<div class="col-md-4">
<form asp-action="Login">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
...
<div class="form-group">
<input type="button" value="Create" id="btnCreate" class="btn btn-primary" />
</div>
</form>
</div>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
<script>
$(function () {
$("#btnCreate").click(function () {
$.ajax({
url: '/Account/Login',
type: 'Post',
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: { "UserName": "AA", "Password": "pass" },
success: function (result) {
alert("sucess");
},
error: function (xhr, status) {
alert(status);
}
});
});
})
</script>
}
JQuery脚本:
$.ajax({
url: '/Account/Login',
type: 'Post',
data: { "UserName": "AA", "Password": "pass" },
success: function (result) {
alert("sucess");
},
error: function (xhr, status) {
alert(status);
}
});
参考:
@model WebApplication6.Models.LoginModel
<div class="row">
<div class="col-md-4">
<form asp-action="Login">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
...
<div class="form-group">
<input type="button" value="Create" id="btnCreate" class="btn btn-primary" />
</div>
</form>
</div>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
<script>
$(function () {
$("#btnCreate").click(function () {
$.ajax({
url: '/Account/Login',
type: 'Post',
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: { "UserName": "AA", "Password": "pass" },
success: function (result) {
alert("sucess");
},
error: function (xhr, status) {
alert(status);
}
});
});
})
</script>
}
[HttpPost]
public IActionResult Login(LoginModel userModel)
{
bool? isAuthenticated = false;
return View();
}
$.ajax({
url: '/Account/Login',
type: 'Post',
data: { "UserName": "AA", "Password": "pass" },
success: function (result) {
alert("sucess");
},
error: function (xhr, status) {
alert(status);
}
});