Asp.net mvc 自定义筛选器属性在代码调用时不运行
我使用一个自定义操作过滤器来授权用户执行操作,其中一些操作返回ActionResult,而另一些操作返回JsonResult 对于每个常规动作,系统执行正常。但是,现在我需要在设计失败的地方实现另一个需求 该视图发布到: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) 其中,我检查用户对写入操作的授
[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调用来更新,而不是更新请求批准并超越授权。