Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 自定义筛选器属性在代码调用时不运行_Asp.net Mvc_Authorization_Filterattribute_Asp.net Mvc Custom Filter - Fatal编程技术网

Asp.net mvc 自定义筛选器属性在代码调用时不运行

Asp.net mvc 自定义筛选器属性在代码调用时不运行,asp.net-mvc,authorization,filterattribute,asp.net-mvc-custom-filter,Asp.net Mvc,Authorization,Filterattribute,Asp.net Mvc Custom Filter,我使用一个自定义操作过滤器来授权用户执行操作,其中一些操作返回ActionResult,而另一些操作返回JsonResult 对于每个常规动作,系统执行正常。但是,现在我需要在设计失败的地方实现另一个需求 该视图发布到: [AuthorizationFilter(Entity = AuthEntity.MyItem, Permission = AuthPermission.Write)] public JsonResult Edit(MyModel model) 其中,我检查用户对写入操作的授

我使用一个自定义操作过滤器来授权用户执行操作,其中一些操作返回ActionResult,而另一些操作返回JsonResult

对于每个常规动作,系统执行正常。但是,现在我需要在设计失败的地方实现另一个需求

该视图发布到:

[AuthorizationFilter(Entity = AuthEntity.MyItem, Permission = AuthPermission.Write)]
public JsonResult Edit(MyModel model)
其中,我检查用户对写入操作的授权。此检查执行正常。但实际上,我的操作只是检查一个条件,并将该操作重定向到控制器中的另一个操作,如下所示:

[AuthorizationFilter(Entity = AuthEntity.MyItem, Permission = AuthPermission.Write)]
public JsonResult Edit(MyModel model)
{
    if (model.Id == 0)
    {
        return Insert(model);
    }
    else
    {
        return Update(model);
    }
}
此外,更新操作还会检查需要其他授权的特定状态:

public JsonResult Update(MyModel model)
{
    if (model.StatusId == (int)Shared.Enumerations.Status.Approved)
        {
            return UpdateRequiresApproval(model);
        }
        else
        {
            return UpdateRequiresNonApproval(model);
        }
    }

[AuthorizationFilter(Entity = AuthEntity.MyItem, Permission = AuthPermission.Approve)]
public JsonResult UpdateRequiresApproval(MyModel model)
问题是,尽管我在UpdateRequiresApproval操作上定义了一个自定义属性过滤器,但它没有运行过滤器(可能),因为它是通过代码调用由另一个操作重定向的,而不是直接从视图重定向的

当代码落在更新要求批准操作时,如何运行过滤器


问候。

返回重定向操作将在Fibenpe中起作用。返回重定向操作(“更新”、“MyController”);表示“无法将类型'System.Web.Mvc.RedirectToRouteResult'隐式转换为'System.Web.Mvc.JsonResult'”。也许您可以创建一个单独的函数,并从
UpdateRequestApproval
Update
调用它,这样,您就不会依赖于
UpdateRequiresApproval
的属性/签名。我不认为我理解您的解决方案,但自定义操作筛选器似乎不会运行,除非您直接从视图本身调用它们。从我的视图直接调用它将向最终用户公开我的逻辑,这不是一件好事,因为用户可能只是发出Jax调用来更新,而不是更新请求批准并超越授权。