c# - ASP MVC 过滤器,在哪里实现接口(interface)?

标签 c# asp.net asp.net-mvc filter action-filter

只是想知道,谷歌搜索如何在 asp mvc 4 中使用过滤器。我发现有些人这样定义它们:

public class CustomFilter : ActionFilterAttribute

有些像这样:

public class CustomFilter : ActionFilterAttribute, IActionFilter

ActionFilterAttribute 已经有所有操作要覆盖,为什么我还要实现接口(interface)?

又比如在下一段代码中,最后再次调用过滤器,这是为什么?

public class 

CustomActionFilter : ActionFilterAttribute, IActionFilter
{
    void IActionFilter.OnActionExecuting(ActionExecutingContext filterContext)


    {
        // TODO: Add your acction filter's tasks here

        // Log Action Filter Call
        MusicStoreEntities storeDB = new MusicStoreEntities();

        ActionLog log = new ActionLog()
        {
            Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
            Action = filterContext.ActionDescriptor.ActionName + " (Logged By: Custom 

Action Filter)",
            IP = filterContext.HttpContext.Request.UserHostAddress,
            DateTime = filterContext.HttpContext.Timestamp
        };

        storeDB.ActionLogs.Add(log);
        storeDB.SaveChanges();

        this.OnActionExecuting(filterContext);
    }
}

最佳答案

如果您检查 MSDN definition of ActionFilterAttribute 你会看到它是一个抽象类,它继承了接口(interface) IActionFilterIResultFilter

实际上继承自ActionFilterAttribute

public class CustomFilter : ActionFilterAttribute

相当于继承类FilterAttribute和接口(interface)IActionFilterIResultFilter

public class CustomFilter : FilterAttribute, IActionFilter, IResultFilter

没什么不同
public class CustomFilter : ActionFilterAttribute, IActionFilter, IResultFilter

所以从 ActionFilterAttribute 继承与从 ActionFilterAttributeIActionFilter 继承没有什么不同。

关于c# - ASP MVC 过滤器,在哪里实现接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16095650/

相关文章:

c# - 将 DataRow 值转换为强类型值

c# - Modelbinder 创建集合项的新实例而不是更新现有实例

c# - 如果在 ListView 中使用 Eval() 或 DataBinder.Eval() 进行声明?

c# - 如何让浏览器后退按钮通过 AJAX 调用带你返回?

c# - 授权在 ASP.NET MVC 5 中不起作用

asp.net-mvc - ASP.NET MVC : Response. Redirect(url, TRUE) 不会停止请求处理

jquery - MVC 5 - 添加客户端验证以拒绝默认值?

css - bundle 来自不同文件夹的样式表和脚本

C# - Linq 多对多与联结表

javascript - 用户离开页面时发生的事件