asp.net-core - .NET Core 服务启动配置
问题描述
我被指派升级一个由前同事建造的项目。我不是 .NET Core 专家,我理解其中的大部分内容与任何其他语言类似,但我无法理解启动时进行的 Fluent 配置。
在 Startup.cs 中,声明了这个函数:
public void Configure(IApplicationBuilder app)
在某些时候,会初始化一个侦听某些内容的服务。我可以从已经初始化的类/服务中管理它,但我想了解这是什么:
app.UseRawRequestRequestBodyHandler(options => options
.Handlers
.AddRange(new[] {
new RawRequestHandler
{
ContentType = NotificationSubscriber.ContentType,
StartSegments = NotificationSubscriber.StartSegments,
Response = "[OK]",
Endpoint = new Uri(_configManager.Client.BaseAddress, "v1/payments").ToString(),
ModifyRequestBodyAsyncFunc = async (handler, context, bodyContent) =>
{
using (var scope = app.ApplicationServices.CreateScope())
{
var subscriber = scope.ServiceProvider
.GetRequiredService<INotificationSubscriber>();
await subscriber.QueueAndAkcknowledgeAsync(handler, context, bodyContent);
}
return bodyContent;
}
},
我在使用 ModifyRequestBodyAsyncFunc 函数时遇到了特殊问题,该函数是这样声明的(在接口中):
public Func<RawRequestHandler, HttpContext, string, Task<string>> ModifyRequestBodyAsyncFunc { set; get; }
另外,我不知道初始化处理程序、上下文和 bodyContent 的方式或位置(RawRequestHandler handler, HttpContext context, string bodyContent
在 NotificationSubscriber 类中声明)。我认为这些是由依赖注入加载的,但对于我见过的其他 DI 实现来说会有所不同。
任何帮助,将不胜感激; 另外,我接受阅读建议。
非常感谢!
解决方案
我在使用 ModifyRequestBodyAsyncFunc 函数时遇到了特殊问题
这是一种特殊的 C# 类型,称为委托。有问题的委托是一个接受RawRequestHeader
,并返回 a的函数HttpContext
,它告诉我们它是异步的。string
Task<string>
接下来,这是创建匿名异步函数并将其分配给委托属性的语法:
/* SomeProp */ = async (handler, context, bodyContent) =>
{
// ...
return bodyContent;
}
另外,我不知道如何或在哪里初始化
handler
,context
并且bodyContent
.UseRawRequestRequestBodyHandler(...)
寄存器 amiddleware
基本上是为每个请求运行的一段代码。因此,在该中间件的某个地方,有代码可以访问所述参数并可能像这样传递它们:
// the params are not necessarily named exactly like this, only the types must match
string content = await rawRequestHeader.ModifyRequestBodyAsyncFunc(handler, context, bodyContent);
请注意await
关键字(我们必须等待异步函数)以及委托像普通方法一样被调用的事实。
推荐阅读
- c - strtok 导致核心转储
- android - 自定义适配器滚动不保存Android中Listview的组按钮状态(向下滚动时状态不保存。)
- java - 如何从 jax-rs 模拟 StreamingOutput
- curl - 在 xargs 中使用 cat 卷曲不起作用
- android - android studio中的重复属性错误
- performance - 自下而上的堆排序与自上而下的堆排序(性能方面)
- javascript - 铁覆盖打开并设置为带背景时禁用滚动
- javascript - Google Places API 正在删除某个地址中的 sublocality_level_1。为什么?
- php - 表格未填写表格并返回空白页
- python - 如何更改生产中的端口?