首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IAuthenticationFilter等价于MVC6

IAuthenticationFilter等价于MVC6
EN

Stack Overflow用户
提问于 2015-07-27 08:37:12
回答 2查看 5.8K关注 0票数 7

我正在将一个WebApi 2项目转移到MVC 6,因为微软正在将ASP.NET 5中的两个Api合并。在我的WebApi项目中,我有一个自定义属性筛选类,它可以使用公钥、私钥和HMAC身份验证(基本上,通过一些调整来适应我的项目)来验证、授权和防止事务重放。

现在在MVC6中,据我所知,我必须停止使用Microsoft.Web.Http命名空间中的任何内容,而是使用Microsoft.AspNet.Mvc。因此,我已经这样做了,但Microsoft.AspNet.Mvc.Filters似乎没有任何等同于Web 2的IAuthenticationFilter

这对我来说是个问题,因为我的客户AuthenticationFilter实现了所有的IAuthenticationFilter,其中包含了所有的逻辑。更重要的是,它使用上下文临时存储帐户的公钥,这样我的控制器就可以访问它,依次加载帐户。

因此,我的问题是,在MVC6中使用类似身份验证过滤器的类来拦截请求并返回适当的状态代码,如何正确地过滤请求?我找不到任何专门涉及这些细节的文章(它们都倾向于覆盖MVC5)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-22 17:16:42

我知道这是个老问题,但希望有人(甚至是你自己)能在答案中找到价值。

事实上,MVC6有一个替代方案。你有一个

代码语言:javascript
复制
public abstract class AuthorizationFilterAttribute :
    Attribute, IAsyncAuthorizationFilter, IAuthorizationFilter, IOrderedFilter

这基本上告诉您,您可以创建您的自定义类,从这个派生它(所有这些接口的命名空间,顺便说一句,是Microsoft.AspNet.Mvc.Filters,也就是它。您可以用它来修饰操作,也可以在Startup.cs中这样做,以应用于所有操作:

代码语言:javascript
复制
 public void ConfigureServices(IServiceCollection services)
    {
        // Add MVC services to the services container.
        services.AddMvc(options =>
        {
            // add an instance of the filter, like we used to do it
            options.Filters.Add(new MySpecialFilter());
        });

        services.AddTransient<LogFilter>();
    }

如果希望在过滤器中使用更多的逻辑(例如,上面的LogFilter ),通过DI实例化,则需要使用任何一个服务过滤器或类型筛选器

现在,您可以使用[ServiceFilter(typeof(LogFilter))]来修饰操作,或者在Startup.cs文件中使用o.Filters.Add(new ServiceFilterAttribute(typeof(LogFilter)));。但请记住,要做到这一点,您需要向DI容器注册类型,就像我前面对.AddTransient<>()调用所做的那样。

票数 4
EN

Stack Overflow用户

发布于 2016-07-20 11:37:29

IAuthenticationFilter已不复存在,IAuthorizationFilter在MVC 6中根本没有取代它。

原因:身份验证不等于授权。

因此,国际海事组织的认证过滤器应该保持可用!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31648446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档