AuthorizationAttribute可以阻止操作完全执行吗?

Mic*_*ins 9 c# asp.net-mvc attributes authorization

我有一个似乎在表面上工作的自定义AuthorizationAttribute.当没有正确权限的用户通过浏览器请求操作时,会显示相应的消息.

我开始将此属性应用于HttpPost执行删除等操作.即使响应正确,操作的主体仍会执行(在这种情况下,项目将被删除).

我希望能够做的是完全阻止action方法在授权属性失败时执行任何操作.这是AuthorizationAttributes的用途,还是我应该以另一种方式查看?

更新:

public override void OnAuthorization(AuthorizationContext filterContext)
{
    Check.Require(filterContext != null);

    if (service.HasPermission(requiredPermission))
        return;

    filterContext.HttpContext.Response.StatusCode = 404;
    filterContext.HttpContext.Response.StatusDescription = "File not found";
}
Run Code Online (Sandbox Code Playgroud)

控制器操作正在按如下方式进行装饰:

[HttpPost, RequiresPermission(Permissions.CanDeleteContentItem)]
public JsonResult Delete(Guid id)
Run Code Online (Sandbox Code Playgroud)

Oma*_*mar 6

在这里查看我的答案,因为它与您要完成的任务类似.

您需要做的是更改操作返回的结果,而不是仅更改标头值.

public override void OnAuthorization(AuthorizationContext filterContext)
{
    Check.Require(filterContext != null);

    if (service.HasPermission(requiredPermission))
        return;

    filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Home" }, {"action", "NoPermission" } })
}
Run Code Online (Sandbox Code Playgroud)

更新

如果要返回正确的HTTP响应,也可以执行以下操作:

filterContext.Result = new HttpUnauthorizedResult();
Run Code Online (Sandbox Code Playgroud)