问题标签 [asp.net-core-middleware]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1429 浏览

c# - 如果早期的中间件已经这样做了,如何告诉 IdentityServer 4 中间件不要进行身份验证?

我的 ASP.NET Core REST API 使用 2 个身份验证中间件 - JWT 来验证用户(由 ADFS 颁发的令牌),以及 IdentityServer 来验证来自其他服务的调用。这些中间件的配置如下所示:

智威汤逊

身份服务器 4 (IDS)

我在使用此设置时遇到问题:

当用户从 ADFS 传递令牌时,JWT 中间件会成功验证令牌。然后 IDS 中间件无法验证令牌并引发错误:

这是意料之中的。如果较早的中间件已成功验证请求,我如何告诉 IDS 中间件不进行验证?

我已经尝试了几件事。在我看来,理想的做法是解决OnMessageReceived用户已通过身份验证的 IDS 事件,并告诉 IDS 中间件不要做进一步检查:

  • 我如何测试用户是否经过身份验证?
  • 如何告诉中间件接受身份验证并且不再进行处理?

我尝试过捕获 IDSOnAuthenticationFailed事件并跳过中间件:

但然后我得到一个范围验证失败:

范围验证在哪里进行?因为似乎 IDS 中间件中的任何错误都会导致范围验证错误,无论我是否SkipToNextMiddleware

如果我删除 IDS 中间件,一切正常。

谢谢你的帮助!

编辑:我现在已经解决了范围验证问题。我尝试ValidateScope = false在 IDS 中间件上设置选项,但这会导致中间件内部出现空引用异常;但我发现如果我注释掉该ScopeName = Configuration.ServiceName选项,范围验证问题就解决了(我在自定义处理程序中处理它 - 不理想)。

仍然需要知道:如果令牌已成功通过身份验证,如何告诉 IdentityServer 中间件跳过,或者在OnMessageReceived事件中识别成功的先前身份验证,以便我可以自己调用SkipToNextMiddleware()那里。

谢谢!

0 投票
3 回答
19172 浏览

c# - 如何从 ASP.Net Core 中的 SqlServerDBContextOptionsExtensions 获取连接字符串

我正在构建一个 ASP.Net Core API,但我无法找到从 DBContextOptions 获取连接字符串的方法。

我的 startup.cs 中有 DBContext,如下所示;

在我的 Context 类中,我有以下构造函数;

但是除非我在 DBContext 类的 OnConfiguring 方法中添加一个实际的连接字符串,否则它不起作用,如下所示;

当我调试并检查 Configuration.GetConnectionString("MainConnection") 中的值时,我可以看到 Startup.cs 正在从 appsettings.json 文件中获取正确的连接字符串。

我认为通过 DI 将选项传递给 DbContext 类会传递连接字符串,但 DbContect 类不起作用,除非我在 OnConfiguring 方法中有 optionBuilder.UseSqlServer() 。

我发现这篇 SO 帖子https://stackoverflow.com/questions/33532599/asp-net-5-multiple-dbcontext-problems谈到了使用以下代码从选项属性中提取连接字符串

但是当我尝试使用它时,我发现options.Extensions中不再有First()方法

所以,我的第一个问题是……

为什么不用在 OnConfiguring 方法中添加连接字符串 DBContext 类不工作

我的第二个问题是...

如果 OnCONfiguring 方法中需要连接字符串,我如何从 DbContextOptions 选项对象中获取它,而不必在 OnConfiguring 方法中显式提供它 --> optionsBuilder.UseSqlServer(@"Server= .....") ;

0 投票
2 回答
981 浏览

asp.net-core - 获取 ID Token 以转发到另一个应用程序

在成功验证后,我想检索ID Token可以通过 GET/POST 请求将其发送到另一个应用程序的内容。

场景如下:

  • 使用不同 url (*.domain.com) 的多个 Web 应用程序
  • 所有应用程序都需要针对 Azure Active Directory 进行身份验证
  • URL 太多,无法将它们全部作为 redirect_url(每个主机名都需要一个)
  • 想法是有一个“登录”应用程序(login.domain.com)来处理登录,然后将 ID 令牌转发到 *.domain.com 应用程序(使用状态字段中的 URL)
  • *.domain.com 然后验证 ID 令牌并授权用户

使用 Microsoft.AspNetCore.Authentication.OpenIdConnect,我无法弄清楚如何检索 ID 令牌以便正确转发它。

我已经为 ASP.NET Core 1.0 Web 应用程序使用了 VS2015 模板并正确配置了身份验证(这有效)

现在我需要以某种方式获得令牌,但我不知道如何。

我想我应该能够在OnTicketReceived使用TicketReceivedContext?

0 投票
1 回答
2660 浏览

asp.net-core - 在 dot net core 中提供来自 Azure Blob 存储的图像

我正在尝试编写一些中间件来通过代理服务 Azure Blob。正在调用处理程序,正在检索 blob,但未显示我的图像。

我编写了一个服务来连接到存储帐户并创建一个 Blob 客户端。我编写了使用服务的中间件,然后下载请求的 blob 并将其写入响应。通常,我希望将 blob 作为字节数组或流下载并将其写入 OutputStream,这似乎不是在 .net 核心中使用新的 httpContext 的选项。

我的中间件:

我在 Startup 中使用 Map 函数调用中间件,如下所示:

最后,我尝试在测试页面上使用该处理程序,如下所示:

    <img src="~/thumbs?qs=1" alt="thumbtest" />

当我调试时,我可以看到所有正确的部分都被击中,但图像永远不会加载,我只得到以下信息:

损坏的图像

我觉得我错过了一些简单的东西,但我不确定那是什么。我正在使用 NetCoreApp 1.1 版。

0 投票
1 回答
192 浏览

c# - 为 Microsoft.AspNetCore.Diagnostics 网络标准库中的中间件编译剃刀视图

我正在尝试编辑Microsoft.AspNetCore.Diagnostics 库的某些部分

但我无法编辑像CompilationErrorPage.cshtml这样的剃刀文件

即使在解决方案或项目编译(命令行和 Visual Studio GUI)之后,文件CompilationErrorPage.Designer.cs也不会改变。

我唯一看到的是他们使用这个工具

它在构建过程中被调用

你知道我错过了什么吗?

0 投票
1 回答
685 浏览

websocket - 使用 ASP.NET 核心 websocket 接收 Unicode

我正在尝试使用可以处理文本消息的 ASP.NET core 1.1 websocket 中间件构建一个 websocket 服务器。我的策略是使用固定大小的缓冲区来继续读取和解码,直到 websocket 消息结束。中间件设置如下:

现在该代码适用于仅包含 ASCII 字符的文本。但是当我尝试发送长度大于缓冲区大小的 Unicode 文本消息(越南语)时,出现异常

异常发生在该行

此错误的原因可能是什么?

0 投票
1 回答
3275 浏览

c# - How to write a middleware as custom router in asp.net core?

I want to transform this code:

into this:

But I don't want to use any service other than Routing

0 投票
2 回答
5163 浏览

asp.net-core - 来自 AuthorizationHandler (ASP.NET Core) 的自定义重定向

我正在使用向第三方服务发出 API 请求的身份验证中间件。然后,此中间件设置稍后由 AuthorizationHandler 与 IAuthorizationRequirement 和自定义策略一起处理的声明。

中间件工作,我能够建立索赔:

我被卡住的地方是从处理程序或属性重定向到特定的 URL(我们需要重定向的地方有自定义规则)。从我尝试过的处理程序:

但它被忽略了;只返回 401。AuthorizeAttribute不再有 OnAuthorization 所以我也不能使用它......

想法?谢谢。

0 投票
4 回答
1279 浏览

asp.net-core - UseStatusCodePagesWithReExecute 未处理的异常重复键:System.Object

AsP.Net Core UseStatusCodePagesWithReExecute(),我正在重定向到/StatusCode/{0}. 我以前使用UseStatusCodePagesWithRedirect()时没有任何明显的问题,但自从更改后,以前重定向的请求现在会导致未处理的异常:

ArgumentException:已添加具有相同键的项目。键:System.Object

这是 VS15 调试窗口的输出:

看起来它正在执行我的 StatusCode 控制器操作,记录错误的原始路径,然后 bam,我得到了异常。是什么导致了这个错误?

0 投票
0 回答
2498 浏览

asp.net-core - Stackify Prefix 不会在 ASP.NET Core 中收集任何数据

我尝试使用 Stackify 的 Prefix 作为Glimpse的替代品,它不支持本机 ASP.NET Core。

根据这篇文章和文档,我使用巧克力安装了服务器应用程序。然后安装 NuGet-PackageStackifyMiddleware并在方法中激活它Configure- 添加 MVC,如官方文档中所述。最后,我使用托盘图标激活了 .NET 分析并重新打开了 Visual Studio。

浏览器打开了Prefix(http://localhost:2012)的数据概览页面,但没有收集到任何信息。我没有暗示我做错了什么。