山东省建设科技协会网站房地产政策
1. 前端请求发起
- 假设前端通过 HTTP GET 请求访问 
GetTemplateSettings端点,URL 中包含了SubjectUuid和SubjectType作为查询参数。 
2. 进入 Controller 方法
- 请求到达后,会进入 
MinBcController类中的GetTemplateSettings方法,该方法是通过[HttpGet("GetTemplateSettings")]特性绑定的。 GetTemplateSettings方法接收一个GetTemplateSettingsRequest类型的参数,该参数由FromQuery特性指定从 URL 查询参数中绑定。
[HttpGet("GetTemplateSettings")]
public async Task<Result<TemplateSettingsVO>> GetTemplateSettings([FromQuery] GetTemplateSettingsRequest request)
{
var data = await mediator.Send(request);
return new Result<TemplateSettingsVO>(data);
}- public record GetTemplateSettingsRequest(string SubjectUuid, SubjectType SubjectType) : IRequest<TemplateSettingsVO>;
 
3. 请求通过 MediatR 分发
- 在 
GetTemplateSettings方法内部,通过调用mediator.Send(request)将GetTemplateSettingsRequest请求对象发送给 MediatR 进行处理。 
4. MediatR 查找并执行处理器
- MediatR 接收到 
GetTemplateSettingsRequest请求后,会根据该请求的类型GetTemplateSettingsRequest,找到对应的处理器GetTemplateSettingsRequestHandler。 GetTemplateSettingsRequestHandler是IRequestHandler<GetTemplateSettingsRequest, TemplateSettingsVO>的实现类,负责处理类型为GetTemplateSettingsRequest的请求并返回TemplateSettingsVO类型的结果。
5. 处理器执行业务逻辑
GetTemplateSettingsRequestHandler类的Handle方法被调用。此方法接受GetTemplateSettingsRequest对象作为参数,并通过IWeuuSession、IUserService、CardDbContext等服务执行相关的业务逻辑。- 业务逻辑处理完成后,
Handle方法返回一个TemplateSettingsVO对象。
 - public class GetTemplateSettingsRequestHandler(IWeuuSession session, IUserService userService, CardDbContext cardContext)
: IRequestHandler<GetTemplateSettingsRequest, TemplateSettingsVO>
{
public async Task<TemplateSettingsVO> Handle(GetTemplateSettingsRequest request,
CancellationToken cancellationToken)
{
//其他代码
return v;
}
} 
6. 返回处理结果
- MediatR 将 
Handle方法返回的TemplateSettingsVO对象返回给GetTemplateSettings方法中的data变量。 GetTemplateSettings方法将TemplateSettingsVO包装在Result<TemplateSettingsVO>对象中,并作为 HTTP 响应返回给前端。
7. 前端收到响应
- 最终,前端接收到包含 
TemplateSettingsVO数据的 HTTP 响应,并根据该数据进行后续处理。 
总结
整个流程通过 MediatR 实现了请求的分发和处理器的解耦,使得 Controller 层只需要关心如何将请求发送给 MediatR,而业务逻辑则集中在处理器中处理。这种设计提高了代码的可维护性和可扩展性。
