如何使用 mvc 6、asp.net 5 注册全局过滤器

Posted

技术标签:

【中文标题】如何使用 mvc 6、asp.net 5 注册全局过滤器【英文标题】:How to register a global filter with mvc 6, asp.net 5 【发布时间】:2015-07-06 04:03:03 【问题描述】:

我正在尝试在一个简单的 mvc 应用程序中注册一个过滤器。除了要测试的基本过滤器之外,我什至还没有真正写过任何东西。我正在使用 VS 2015 RC,并通过转到新项目 -> Asp.net Web 应用程序 -> Web API 创建了初始应用程序。我遇到的问题是我找不到全局注册过滤器的方法。

在 MVC 的早期版本中,我看到了 GlobalFilters.Filters,但是当我尝试在新框架中使用它时,它告诉我找不到 GlobalFilters。在以前的版本中,它存在于 System.Web.MVC 中,但我不再在我的参考资料中看到它,而且我似乎无法在任何地方找到它。

这看起来应该很简单,但到目前为止我还没有找到方法。

这是我的 project.json


  "webroot": "wwwroot",
  "version": "1.0.0-*",

  "dependencies": 
    "Microsoft.AspNet.Mvc": "6.0.0-beta4",
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta4",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta4"
  ,

  "commands": 
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5000"
  ,

  "frameworks": 
    "dnx451": 
      "frameworkAssemblies": 
      
    ,
    "dnxcore50":  
  ,

  "exclude": [
    "wwwroot",
    "node_modules",
    "bower_components"
  ],
  "publishExclude": [
    "node_modules",
    "bower_components",
    "**.xproj",
    "**.user",
    "**.vspscc"
  ]

【问题讨论】:

App_Data 文件夹中通常有一个FilterConfig 类;这就是你所追求的吗? 好吧,FilterConfig 接受了 GlobalFilters.Filters,但我无法让 GlobalFilters 开始 您是否尝试纯粹通过 project.json 文件注册过滤器?此外,您已标记此 MVC5,但显示的配置文件表明您正在使用 MVC6;对吗? 抱歉,我忘记了我是 6 号。我一直在玩最新的测试版,但弄糊涂了。我正在尝试在 startup.cs 中注册过滤器,该过滤器是从 ASP.net 5 预览模板下的 VS 2015 RC 默认 Web api 项目自动生成的 在 MVC 6 中情况确实发生了变化。我认为这篇文章会对你有所帮助。 strathweb.com/2015/02/overriding-filters-asp-net-mvc-6 【参考方案1】:

现在使用 Beta 8 通过 AddMvc 完成,如下所示:

services.AddMvc(options =>

    options.Filters.Add(new YouGlobalActionFilter());
);

【讨论】:

感谢您的回答!是否可以仅对某些特定的 mvc 区域应用过滤器? (我希望我的后端对匿名用户关闭,而不是前端。)谢谢!【参考方案2】:

如何在 MVC 6 中执行此操作的示例

public void ConfigureServices(IServiceCollection services)

   services.AddMvc();
   services.ConfigureMvc(options =>
   
      options.Filters.Add(new YouGlobalActionFilter());
   

【讨论】:

此答案不再有效,请参阅 Lee Jones 答案 (***.com/a/33768705/11220)

以上是关于如何使用 mvc 6、asp.net 5 注册全局过滤器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET MVC 6 中注册 ILogger 以进行注入

ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常

ASP.Net 5 MVC 6,如何使用共享 Error.cshtml 作为默认错误响应

如何在 Asp.Net 5 (MVC 6) 中使用实体框架 6.x

如何在 ASP.NET 5 MVC 6 (vNext) 中定义 Identity 的密码规则?

如何在 ASP.NET MVC 5、Entity Framework 6 中使用流利的 API 映射表?