gpt4 book ai didi

asp.net-web-api2 - MVC6 中的 IAuthenticationFilter 等效项

转载 作者:行者123 更新时间:2023-12-03 17:56:35 25 4
gpt4 key购买 nike

我正在将 Web Api 2 项目移动到 MVC 6,因为 Microsoft 正在合并 ASP.NET 5 中的两个 API。在我的 WebApi 项目中,我有一个自定义属性过滤器类,它将使用以下组合进行身份验证、授权和防止事务重播公钥、私钥和 HMAC 身份验证(基本上,doing this 进行了一些调整以适应我的项目)。

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

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

所以我的问题是,在 MVC6 中过滤请求的正确方法是什么,使用类似身份验证过滤器的类来拦截请求并返回适当的状态代码?我找不到任何专门介绍这些细节的文章(它们都倾向于涵盖 MVC5)。

最佳答案

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

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

public abstract class AuthorizationFilterAttribute :
Attribute, IAsyncAuthorizationFilter, IAuthorizationFilter, IOrderedFilter

这基本上告诉你,你可以创建你的自定义类,从中派生它(所有这些接口(interface)的命名空间,顺便说一句,是 Microsoft.AspNet.Mvc.Filters 应该是它。你可以用它来装饰 Action ,或者你可以做这在 Startup.cs 中,适用于所有操作:
 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>();
}

如果您想在通过 DI 实例化的过滤器中使用更多逻辑(例如上面我的 LogFilter),则需要使用 Service Filters or Type Filters .

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

关于asp.net-web-api2 - MVC6 中的 IAuthenticationFilter 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31648446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com