问题标签 [request-pipeline]
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.
asp.net-core - ASP.Net Core 2.0 - How to return custom json or xml response from middleware?
In ASP.Net Core 2.0, I am trying to return a message formatted as json or xml with a status code. I have no problems returning a custom message from a controller, but I don't know how to deal with it in a middleware.
My middleware class looks like this so far:
c# - ASP.Net Core 2.0 如何获取中间件中的所有请求标头?
在 ASP.Net Core 2.0 中,我试图在自定义中间件中验证传入的请求标头。
问题是我不知道如何提取所有键值对标头。我需要的标头存储在受保护的属性中
到目前为止,我的中间件类看起来像这样:
我的目标是提取所有请求标头,而不仅仅是一些我必须知道特定键的选定标头。
asp.net-core - 以编程方式调用 ASP.NET Core 请求管道
问题
鉴于我有一个 HTTP 动词、路由、标头和正文有效负载,有没有办法从我自己的应用程序中以编程方式调用 ASP.NET Core 请求管道?
背景
在某些用例中,我们的 ASP.NET Core 应用程序的 WebAPI 无法访问,因为应用程序在防火墙后面运行或无法访问。
为了为这种情况提供解决方案,我们希望我们的应用程序轮询一些其他服务以获取“工作项”,然后将其转换为我们应用程序中的 API 调用。
我考虑的方法
- 我可能只是要求 DI 给我一个控制器的实例,然后在其上调用方法。这种方法的问题:
- 不强制执行授权属性。但在我们的用例中,验证不记名令牌很重要。所以这里的问题是:如何以编程方式调用授权中间件?
- 我必须自己将传入的工作项路由到正确的控制器/方法。
- 使用这个
Microsoft.AspNetCore.TestHost
包我可以创建一个TestClient
允许我向自己提出请求的包(见这里)。但这里有几个不确定性:- 它的预期用例
TestHost
是用于集成测试。在生产环境中使用它是否安全? - 甚至有可能
TestServer
与常规托管一起运行吗? - 那么线程安全呢?我可以
TestClients
从一个TestServer
实例创建多个并从不同的线程中使用它们吗?
- 它的预期用例
因此,我确信必须有一种更清洁、更直接的方式来从我自己的应用程序中以编程方式调用请求管道......
.net-core - 如何使用控制器中的文件提供程序提供页面?
我有一个Asp Net Core
,虽然我有一些代表简单API
调用的控制器,但我也想用FileProvider
's 来服务页面。
如何将页面请求重定向到控制器(检查凭据)并提供服务?我还必须分支管道,以便我可以提供简单json
的服务。
到目前为止,我的文件提供程序已提供给每个请求它的人。我如何从控制器使用它(在请求中添加额外的保护逻辑)?
启动
页面控制器
API 控制器
这是一个普通控制器,只要有人请求非页面请求,就会使用其逻辑:
PS 我不知道PageController
如果方法返回文件应该有什么返回类型?
asp.net-core - 在 .net Core 的 Use() 方法中使用 next() 方法?
如果我不在请求管道的 Use() 方法中调用 next() 方法或 next.Invoke() 会发生什么,它会调用下一个中间件组件吗?
c# - 为什么 ASP.NET Core 在中间件管道结束时返回 404?
我想了解 ASP.NET Core 如何确定我们已到达中间件管道的末端并开始发回响应。这是处理它的代码(来自GitHub 存储库):
我的问题是:这条线context.Response.StatusCode = 404;
是做什么的?为什么它甚至在那里?不应该是200
(“OK”)吗?更改此默认值以使我们不会在每个请求上都收到“404 Not Found”错误的代码在哪里?
asp.net - 向 ASP.NET 请求活动添加标记
一旦请求处理开始,我想为每个传入的 ASP.NET 请求向 System.Diagnostics.Activity 对象添加一个标记。有没有办法可以访问请求管道的 ActivitySource 并为其添加侦听器?
目前我正在考虑使用管道中间件,但必须有一种更轻量级的方式。尤其是其他开发人员无法在此之前添加任何其他中间件处理程序的情况。有任何想法吗?
asp.net - 为什么引用自定义 .NET 库的“PreApplicationStartMethod”会导致 Log4Net 静默失败?
我正在查看的实际问题可能比标题所暗示的要复杂一些,但我还没有理解它。这是我所拥有的:
语境
我有一个包含许多项目的解决方案,但这里只有 3 个问题:一个 ASP.NET WebForms UI 项目(项目 A)和一个 Web 服务项目(项目 B)。
项目 A 引用了项目 B,因为它使用了我不想实现两次的 Web 服务的某些部分。两者还引用程序集 C(相同版本),这是一个不属于解决方案代码的库。所有这些都引用了相同的 log4net 库版本。
由于项目 B 还具有 Swagger,因此它包含以下SwaggerConfig.cs
文件:
现在这一切都适用于 swagger 和 Web 服务,但是一旦启用“LINE OF TROUBLE”,项目 A(!)中的 Log4Net 就会默默地失败。
此行使用自定义AppSettings.TryGetStringValue
方法,该方法驻留在引用的、自行编写的 .NET 程序集“C”中,并且基本上执行该AppSettings.Get
方法的功能,并可能具有默认值。
一旦我使用AppSettings.TryGetStringValue
,登录项目 A 就会失败。使用内置时AppSettings.Get
,日志记录有效。
问题
我怀疑问题在于引用程序集“C”的加载,但究竟为什么呢?
为什么 Log4Net 在项目“A”中静默失败PreApplicationStartMethod
,而在另一个引用的项目“B”中使用时,该项目“B”引用了自定义 .NET 库“C”?
笔记
string rootUrl = ConfigurationManager.AppSettings.Get("SwaggerRootUrl");
当我将 LINE OF TROUBLE 替换为仅暗示引用库 C 的加载存在问题时,问题就消失了。