我已将 SignalR 引入到我的 ASP.NET Core 2 项目中,但在使用我通常在控制器中使用的范围服务时遇到了一些问题。我觉得这个问题可能是由于 HTTP 请求、Websocket 和集线器之间的生命周期不同造成的。
对于每个 HTTP 请求,中间件都会读取Authorization令牌并更新该请求的作用域服务 ( ) 上的一些属性(例如 id、声明等)IUser。我在所有控制器中使用此服务没有任何问题。为了使其与 SignalR 一起使用,我发送一个access_token查询参数并事先使用一些其他中间件将此查询参数添加为工作正常的标头。
当我尝试访问IUserSignalR 中心中的服务时,问题就出现了。在构建集线器时,IUser被注入的 没有设置任何属性,尽管/hub请求的中间件只是设置了它们。
如果我将服务设置为单例,那么它可以工作,但IUser持续时间不应超过单个请求。
IUser我应该如何为特定 SignalR 连接设置?
// Startup.cs - User has several settable properties
services.AddScoped<IUser, User>();
Run Code Online (Sandbox Code Playgroud)
// User Middleware
public class UserMiddleware
{
private readonly RequestDelegate _next;
public UserMiddleware(RequestDelegate next)
{
_next = next;
}
public Task Invoke(HttpContext context)
{
// …Run Code Online (Sandbox Code Playgroud) 我Startup.cs启用了 JWT 身份验证,它在我的应用程序中完美运行。
b.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, o =>
{
o.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = key,
ValidateIssuer = true,
ValidIssuer = JwtConstants.Issuer,
ValidateAudience = true,
ValidAudience = JwtConstants.Audience,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
};
});
Run Code Online (Sandbox Code Playgroud)
在我的一个控制器中,我想获取配置TokenValidationParameters中设置的句柄Startup.cs。我认为我可以通过向控制器构造函数提供IOptions<JwtBearerOptions> options并读取来实现此options.Value.TokenValidationParameters目的,但是,当注入时,属性与 中设置的值不匹配Startup.cs。
我的最终目标是手动验证 JWT 令牌,如下所示。
var handler = new JwtSecurityTokenHandler();
var user = handler.ValidateToken(token, validationParameters, out var validatedToken);
Run Code Online (Sandbox Code Playgroud) 我有一种语言,{a^i b^j c^k | i,j,k>=0 & i>j & j>k}
我开始假设有一些m是为我挑选的,这样就是一个字符串
z = a^m b^(m-1) c^(m-2)
Run Code Online (Sandbox Code Playgroud)
然后,将字符串分成(z =) uvwxy,这样vx是不是空的,#(vwx)<=m
然后,当我来挑一个" i"我感到困惑.说我选择i=1然后我有:
uv^1wx^1y而且我不完全确定从哪里开始因为对我来说看起来我可以选择一种语言中的vwx.
有什么建议?
Python对函数变量有命名约定吗?在PEP-8中,我看不到任何特定的东西(除了命名变量)。
由于函数是Python中的一类对象,因此使用_fn后缀或类似的东西是公认的约定吗?
编辑:更新了更现实的例子
例:
def foo_a():
print 'a'
def foo_b():
print 'b'
funcs = {'a': foo_a, 'b': foo_b}
# dynamically select function based on some key
key = 'a'
foo_fn = funcs[key]
Run Code Online (Sandbox Code Playgroud) 我可以弄清楚如何创建字符串的字谜但我不知道如何将它们与真实单词的字典进行比较以检查字谜是否是真正的单词.Java API中是否包含整个英语词典?
我正在编写一个库,该库将在连接到 Raspberry Pi 的 LED 矩阵上打印滚动文本。
我想要一个函数,它接受一个字符、高度和宽度并生成一个矩阵,其中包含应该设置的像素以表示指定的字符。
例如
def char_to_pixels(char, height, width):
matrix = [width][height]
# determine which pixels to set based on character supplied
...
return matrix
Run Code Online (Sandbox Code Playgroud)
因此,对于char_to_pixels('I', 6, 6)您的呼叫,您可能需要一个如下所示的矩阵:
|0|1|1|1|1|0|
|0|0|1|1|0|0|
|0|0|1|1|0|0|
|0|0|1|1|0|0|
|0|0|1|1|0|0|
|0|1|1|1|1|0|
Run Code Online (Sandbox Code Playgroud)
我可以尝试为 [AZ] 定义每一个,但我想知道是否有一个图书馆已经做了这种事情?
有没有办法检查是NULLPL/SQL 中的值列表?
我有类似的东西:
SELECT * FROM myTable t WHERE t.dataId IN (:myList) OR :myList IS NULL
Run Code Online (Sandbox Code Playgroud)
在运行时,:myList符号代替字符串列表,例如
SELECT * FROM myTable t WHERE t.dataId IN ('a', 'b', 'c') OR ('a', 'b', 'c') IS NULL
Run Code Online (Sandbox Code Playgroud)
我已经意识到这('a', 'b', 'c') IS NULL是无效的PL/SQL,所以我想知道是否有另一种方法可以检查值列表NULL.
我试图模仿的行为将评估('a', 'b', 'c')为NOT NULL.我试图避免创建另一个变量(例如:myListFlag),''如果列表为空,它将返回.
After trawling the internet for hours, I'm lost on how to solve my problem for ASP.NET Core 2.x.
I am generating a CSV on the fly (which can take several minutes) and then trying to send that back to the client. Lots of clients are timing out before I start sending a response, so I am trying to stream the file back to them (with an immediate 200 response) and write to the stream asynchronously. It seemed like this was …
.net-core ×3
asp.net-core ×3
c# ×2
java ×2
python ×2
string ×2
anagram ×1
asp.net ×1
asp.net-mvc ×1
csvhelper ×1
dictionary ×1
function ×1
graphics ×1
math ×1
matrix ×1
plsql ×1
python-3.x ×1
signalr ×1
solver ×1
sql ×1