在IAsyncActionFilter中使用MemCache

约翰

我的项目中有此类,我想使用内存缓存来加快速度:

 [AttributeUsage(validOn: AttributeTargets.Class | AttributeTargets.Method)]
public class ApiKeyAuthAttribute : Attribute, IAsyncActionFilter
{
    private readonly IMemoryCache _cache;
    private string accessKey;
    private string apiKey;
    public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        
        context.HttpContext.RequestServices.GetRequiredService<MemoryCache>();
        var connection = context.HttpContext.RequestServices.GetRequiredService<ApiKeyContext>();

        if (!context.HttpContext.Request.Headers.TryGetValue(key:"ApiKey", out var potentialApiKey))
        {
            context.Result = new UnauthorizedResult();
            return;
        }

        context.HttpContext.Request.Headers.TryGetValue(key: "Client", out var apiClient);
        if (!_cache.TryGetValue<string>(apiClient, out accessKey))
        {
            apiKey = connection.ApiKey.Where(x => x.Client == apiClient.ToString()).Select(x => x.Apikey1).SingleOrDefault();
        }
        
        context.HttpContext.Request.Headers.TryGetValue(key: "ApiKey", out var clientApiKey);

        if (!string.IsNullOrEmpty(apiKey))
        {
            if (!apiKey.Equals(clientApiKey))
            {
                context.Result = new UnauthorizedResult();
                return;
            }
        }
        else
        {
            context.Result = new UnauthorizedResult();
            return;
        }

        await next();
    }
}

这是我的启动类ConfigureService方法:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddDbContext<ApiKeyContext>(options => options.UseSqlServer(Configuration.GetConnectionString("ApiKey")));
        services.AddMemoryCache();
    }

我可以注入EntityFramework上下文并对其进行访问,而不会出现任何问题,并且可以从数据库中提取密钥以使所提供的客户端与APIKey相匹配。现在,我想通过将apiKey放入内存缓存中来提高密钥检索的速度。但是,当我尝试使用GetRequiredService()请求服务时,出现此错误:

没有注册类型'Microsoft.Extensions.Caching.Memory.MemoryCache'的服务。

我无法在构造函数中注入内存缓存,因为接口实现不允许使用接口。那么,如何在context.HttpContext.RequestServices上使用GetRequiredServices方法设置要注入的内存缓存?

阿卡什·卡瓦(Akash Kava)

更改

context.HttpContext.RequestServices.GetRequiredService<MemoryCache>();

context.HttpContext.RequestServices.GetRequiredService<IMemoryCache>();

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在函数中使用“使用”?

来自分类Dev

Memcache在使用acts_as_cached插件时获取错误的值

来自分类Dev

如何使用在App Engine中导入Memcache的库

来自分类Dev

PHP会话锁定并使用Memcache存储会话

来自分类Dev

如何在Yii中使用CFileCache和Memcache

来自分类Dev

如何在Gae,NDB中使用Memcache缓存分页查询?

来自分类Dev

在yii2中使用memcache缓存值

来自分类Dev

使用Memcache进行棘轮会话数据同步

来自分类Dev

如何使用Google App Enninge SDK在本地2个应用程序之间共享Memcache项目

来自分类Dev

如何使用Rails.cache.fetch和memcache存储零?

来自分类Dev

如何在PHP中使用memcached(而非memcache)

来自分类Dev

在CentOS上使用PHP 7的Memcache扩展无法安装

来自分类Dev

缺少IAsyncActionFilter中ParameterDescriptor上的GetCustomAttributes

来自分类Dev

在C ++中使用“使用”

来自分类Dev

IAsyncActionFilter返回空白页

来自分类Dev

IAsyncActionFilter返回空白页

来自分类Dev

在函数中使用“使用”?

来自分类Dev

使用Memcache和Dalli进行Ruby on Rails缓存似乎不起作用

来自分类Dev

使用Memcache的PDO存储阵列

来自分类Dev

PHP Memcache使用“ true”获取值的问题

来自分类Dev

在yii2中使用memcache缓存值

来自分类Dev

在使用子对象更新和检索模型实例时,如何在Django中使用memcache?

来自分类Dev

如何使用Memcache协议

来自分类Dev

使用Memcached和python-memcache进行缓存

来自分类Dev

如何在Appengine上搭配JDO / Datanucleus使用Memcache(Gradle)

来自分类Dev

在<a> </a>中使用“&”

来自分类Dev

无法使用终端卸载php-memcache

来自分类Dev

在属性访问“ __getattribute__”上使用twisted代理memcache调用

来自分类Dev

在使用中使用or /和

Related 相关文章

热门标签

归档