Javascript AJAX/ASP.NET核心MVC/DevExtreme回发返回错误的url(错误/错误?代码=22)

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

我在MVC应用程序中使用Ajax,在单击注销按钮时发回帖子。我想将用户发送回登录页面,并将其路由到控制器中的HttpPost metod。但是,在我的Ajax代码中,当我单击“注销”时出现错误:
找不到此本地主机页未找到该网址的网页: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);
                }
            });