- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我将 Mediatr 用于 ASP.NET 核心项目来处理所有请求。我实现了几个请求/响应/处理程序。它们中的每一个都可以抛出一个特定的异常,我们称这个为“MyException”类。我将异常处理程序定义为
public class MyExceptionHandler : RequestExceptionHandler<MyRequest<MyResponse>, MyResponse, MyException>
{
protected override void Handle(MyRequest<MyResponse> request, MyException exception, RequestExceptionHandlerState<MyResponse> state)
{
MyResponse response = new MyResponse();
//Set some specific properties here in the response to indicate an error occurred
state.SetHandled(response);
}
}
我将此异常处理程序添加到 (Autofac) 依赖项容器中,如果我在 MyRequest 和 MyResponse 的 MyHandler 中抛出 MyException,这将起作用。但是,我有几十个请求、响应和相应的处理程序。那么我如何为这个特定的异常注册这个异常处理程序呢(注意:所有的响应都来自同一个基类)。它尝试了类似下面的内容,但是没有被调用。它只有在我给出实际类型时才有效,但这意味着我必须为每种类型创建一个异常处理程序,这远非实用。关于如何解决这个问题的任何想法?
public class MyExceptionHandler : RequestExceptionHandler<IRequest<BaseResponse>, BaseResponse, MyException>
{
protected override void Handle(IRequest<BaseResponse> request, MyException exception, RequestExceptionHandlerState<BaseResponse> state)
{
BaseResponse response = new BaseResponse();
//Set some specific properties here in the response to indicate an error occurred
state.SetHandled(response);
}
}
最佳答案
你可以像这样创建一个通用的:
public class ExceptionLoggingHandler<TRequest, TResponse, TException> : IRequestExceptionHandler<TRequest, TResponse, TException>
where TRequest : IRequest<TResponse>
where TException : Exception
{
private readonly ILogger<ExceptionLoggingHandler<TRequest, TResponse, TException>> _logger;
public ExceptionLoggingHandler(ILogger<ExceptionLoggingHandler<TRequest, TResponse, TException>> logger)
{
_logger = logger;
}
public Task Handle(TRequest request, TException exception, RequestExceptionHandlerState<TResponse> state, CancellationToken cancellationToken)
{
_logger.LogError(exception, "Something went wrong while handling request of type {@requestType}", typeof(TRequest));
// TODO: when we want to show the user somethig went wrong, we need to expand this with something like
// a ResponseBase where we wrap the actual response and return an indication whether the call was successful or not.
state.SetHandled(default!);
return Task.CompletedTask;
}
}
然后像这样在 IerviceC 上注册它:
services.AddTransient(typeof(IRequestExceptionHandler<,,>), typeof(ExceptionLoggingHandler<,,>))
因为 RequestExceptionProcessorBehavior
类将使用 3 个泛型查找此类型,而不是 IRequestExceptionHandler<,>
一个。
关于c# - 如何在 Mediatr 中为所有请求定义一个特定的异常处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65297156/
我已经使用 MediatR 尝试了 CQRS 模式,并且我喜欢应用程序正在转换的干净状态。 在我见过和使用过的所有例子中,我总是这样做 await Mediator.Send(command); 查询
我正在尝试在 .NET Framework 4.6.2 中使用 Autofac 运行 MediatR。 我的注册: public class MediatorModule : Autofac.Modu
有谁知道如何在控制台应用程序中实现 MediatR,以使用 _mediatr.Send(obj) 语法调用处理函数。我正在使用 .Net 6 框架。感谢您的帮助。 最佳答案 首先,您必须安装这些包:
如果我发送 HTTP Get 请求: /api/Company/1 我有一个 OwinMiddleware我在哪里使用 context确定path和 IAsyncRequest 的 json 内容.
我在应用程序中使用 MediatR 和 CQRS。以下两条语句存在于很多模块中,在应用程序中可能会被并发调用(这是一个blazor应用程序)。 await Mediator.Send(new AddI
如何设置 PipelineBehavior 的优先级?我有 3 个管道。我想先执行 AuthorizationPipeline。如果 AuthorizationPipeline 抛出任何 Securi
您好,我已经使用这种带有管道行为的 Mediator CQRS 模式有一段时间了,但现在我遇到了一个问题,即 TResponse 和 TRequest 的通用实现还不够。因此,我试图了解为两个非常具体
我正在使用 Mediatr 开发 ASP.NET Core 2.2 Web API 应用程序。 我有一个看起来像的处理程序 - public class MyQueryHandler : IReque
在查询中对当前用户建模的最佳方法是什么?我正在创建一个 Razor 页面应用程序。在执行查询和命令时,我需要能够附加当前用户。有推荐的方法吗? 最佳答案 下面的方法对我很有效,因为我让用户进入了我的
在 MediatR 的文档中说: Containers that support generic variance will dispatch accordingly. For example, yo
我正在使用 MediatR具有以下类: public class GetPostsRequest : IRequest> { public Int32 Age { get; set; } } pu
我在我的 web api 2 项目中使用 Mediatr 4。与 FluentValidation 和 Unity 一起,我一直在添加管道行为来验证我的请求。 public class Validat
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我是 MediatR 的新手,尝试使用管道行为进行请求验证,如果发生任何错误,我遇到的所有示例都会抛出 ValidationException。 下面的代码是验证管道的示例: public class
我意识到我看到了(非常相似的)问题,但这似乎与通常提出的问题略有不同。 我得到了这个通知/通知处理程序 public class GenericEvent : INotification {
我正在研究 CQRS 和 MediatR 库,试图学习一些最佳实践。我遇到的一个问题是命令/查询处理程序中的代码重复。我想知道在处理程序之间共享逻辑的最佳方式是什么。 例子:我有一个定义 ID 属性的
如何让我的 MediatR 通知处理程序触发并忘记? 我的示例代码: public class BackupDatabase : INotification {} public class Backu
我想缓存一些来自 CommandsHandlers 的响应。 我已经使用 IPipelineBehaviour 做到了这一点,但我的请求中只有 5% 确实必须有缓存,而其他 95% 必须跳过此管道。有
我只想装饰一个 MediatR 处理程序。我尝试使用 Behaviours,但 Behaviors 为每个实现 IRequestHandler 的处理程序注入(inject)了装饰器。 public
我尝试使用CQRS制作.NET Core API,但由于MediatR错误而无法构建它: System.AggregateException:'某些服务无法构造(验证服务描述符'ServiceType
我是一名优秀的程序员,十分优秀!