我有这样的缓存服务:
public interface ICacheService {
T Get<T>(string cacheID, Func<T> getItemCallback, int cacheMinutes = 5) where T : class;
}
public class MemoryCacheService : ICacheService {
public T Get<T>(string cacheId, Func<T> getItemCallback, int cacheMinutes = 5) where T : class {
T item = MemoryCache.Default.Get(cacheId) as T;
if (item == null) {
item = getItemCallback();
MemoryCache.Default.Add(cacheId, item,
new CacheItemPolicy {AbsoluteExpiration = DateTime.Now.AddMinutes(cacheMinutes)});
}
return item;
}
}
Run Code Online (Sandbox Code Playgroud)
并检索如下:
var result = _cache.Get("mylist", () => _database.Fetch<MyList>().AsQueryable(), 600);
Run Code Online (Sandbox Code Playgroud)
该列表很大,并且在每个击键类型提前下拉列表中经常访问.查询条件也是动态的,比如
if (this) result = …Run Code Online (Sandbox Code Playgroud) 我在 appsetting.json 中有这个提供程序字典
"AppSettings": {
"Providers": {
"http://localhost:5001": "Provider1",
"http://localhost:5002": "Provider2"
},
"ArrayWorks": [
"http://localhost:5001",
"http://localhost:5002"
],
"SoDoesColonInDictionaryValue": {
"Provider1": "http://localhost:5001",
"Provider2": "http://localhost:5002"
}
}
Run Code Online (Sandbox Code Playgroud)
下面抛出异常,因为字典键中有冒号。
Configuration.GetSection("AppSettings").Get<AppSettings>()
但是,冒号可以很好地用作字典值或数组,但不能用作字典键。我读到冒号在配置中具有特殊含义,但似乎没有办法逃脱。为什么?
编辑:
public class AppSettings
{
public string ApplicationName { get; set; }
public IDictionary<string, string> Providers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
调试 Configuration.GetSection("AppSettings") 时,您会得到这个
Key AppSettings:Providers:http://localhost:5000
Value Provider1
Run Code Online (Sandbox Code Playgroud)
本来是这样的
Key AppSettings:Providers:http_//localhost_5000
Run Code Online (Sandbox Code Playgroud)
但似乎没有办法控制配置如何对待 :::
或者这被认为是不好的做法还是什么?
我有一个通知触发 4-5 个处理程序,这些处理程序又调用数据库来检索数据。每个这些调用也可以单独调用,因此它们本身就是请求/处理程序。
谢谢。
RazorPage 通常返回 void、Task、IActionResult,例如
public Task OnGet() { }
public Task<IActionResult> OnGet() { }
Run Code Online (Sandbox Code Playgroud)
也有可能让处理程序返回 Json,例如
public Task<JsonResult> OnGetAlso() { }
Run Code Online (Sandbox Code Playgroud)
但是在某些情况下,我希望处理程序返回原始字符串,但我找不到一种简单的方法来做到这一点。
public Task<string> OnGetSomeString()
{ return "something"; }
Run Code Online (Sandbox Code Playgroud)
但我总是收到错误不支持的处理程序方法返回类型。这可能吗?谢谢
asp.net-core ×2
c# ×2
appsettings ×1
cqrs ×1
linq ×1
mediatr ×1
memorycache ×1
oop ×1
razor-pages ×1