尝试在ASP.MVC CORE中使用ajax时未经授权

时间:2017-10-06 13:03:26

标签: jquery ajax asp.net-mvc

我正在开发一个包含多个用户的Web应用程序。在我的一个视图中,我有一个有删除按钮的表。该按钮必须删除整行。

我可以在按钮上使用类似的东西:

<a asp-action="Delete" asp-route-id="@item.ID" class="btn btn-primary">Delete</a>

但是,我读到这是一个不好的方法,因为在修改服务器上的资源时必须使用POST。使用Form标签似乎不是一个选项,因为我可以有100或200行。我错了吗?

这就是为什么我尝试使用AJAX,以便在点击按钮时在后台发布。然而,这也给了我很多问题。有时我遇到了来自服务器的未经授权的响应。我正在使用Identity框架。

过去一周,我一直试图寻找解决方案。我读过令牌可以用于身份验证,但是,对于这样一个简单的问题来说,这似乎有些过分。谢谢你的帮助

服务器端:

    [Authorize]
    [HttpGet]
    public IActionResult GetAllWorkOrders()
    {
        var UserId = _userManager.GetUserId(User);
        var allWorkOrders = _context.UserHistoryDTI.Include(_ => _.WorkOrdersHistory).Where(_ => _.UserId == UserId).FirstOrDefault().WorkOrdersHistory;
        return Ok(JsonConvert.SerializeObject(allWorkOrders));
    }

客户方:

function GetWorkOrderList() {
    $.ajax({
        url: '/DTClocking/api/myhours/GetAllWorkOrders',
        type: "GET",
        success: function (data) {
            var objData = JSON.parse(data);
            var option = "<option>All</option>";
            for (var i = 0; i < objData.length; i++) {
                option += '<option>' + objData[i].Name + '</option>';
            }

            $("#workOrderListDTI").empty();
            $("#workOrderListDTI").append(option);
        }
    });
}

当我在本地测试时,根本不存在身份验证问题。问题开始发生的唯一时间是我试图通过计算机(在我们的本地网络上)访问该网站。更糟糕的是,问题有时是不一致的,有时它不起作用。

0 个答案:

没有答案