Par*_*osh 1 .net c# asp.net asp.net-mvc
我正在构建以下过滤器:
public class TestflowFilter : FilterAttribute, IActionFilter
{
public void OnActionExecuted(ActionExecutedContext filterContext)
{
var profileId = int.Parse(ClaimsPrincipal.Current.GetClaimValue("UserId"));
var appId = int.Parse(filterContext.RouteData.Values["id"].ToString());
if (profileId != 0 && appId != 0)
{
if (CheckIfValid(profileId, appId))
{
// redirect
filterContext.Result = // url to go to
}
}
}
public void OnActionExecuting(ActionExecutingContext filterContext)
{
}
}
Run Code Online (Sandbox Code Playgroud)
我实际上只需要OnActionExecuted,但由于IActionFilter是一个接口,所以我必须同时实现它们。OnActionExecuting如果我不需要发生任何事情,可以留空吗?还是需要调用 MVC 始终运行的基本版本?
另外,在该OnActionExecuted方法中,如果CheckIfValid是true,我会重定向用户,但如果不是,我不会执行任何操作。可以吗,还是我需要设置一些属性filterContext。
我实际上只需要 OnActionExecuted,但由于 IActionFilter 是一个接口,我必须同时实现它们。如果我不需要发生任何事情,是否可以将 OnActionExecuting 留空,或者我是否需要调用 MVC 始终运行的基本版本?
在这种情况下,将方法体留空是完全可以接受的。看起来不错!
另外,在 OnActionExecuted 方法中,如果 CheckIfValid 为 true,我会重定向用户,但如果不是,我不会执行任何操作,这样可以吗,还是我需要在 filterContext 上设置某些属性。
你的过滤器没问题。MVC 确实提供了一个名为 的不同抽象基类ActionFilterAttribute,它实现了这些接口,供您根据需要进行重写。您可以在此处阅读一篇很好的概述。如果您从该类派生,您的过滤器属性代码可以稍微简化:
public class TestflowFilter : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
var profileId = int.Parse(ClaimsPrincipal.Current.GetClaimValue("UserId"));
var appId = int.Parse(filterContext.RouteData.Values["id"].ToString());
if (profileId != 0 && appId != 0)
{
if (CheckIfValid(profileId, appId))
{
// redirect
filterContext.Result = // url to go to
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7551 次 |
| 最近记录: |