问题标签 [custom-action-filter]

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 投票
1 回答
593 浏览

c# - ASP.NET MVC:为什么我的自定义 ActionFilter 会更改我的 HTTP 响应代码?

我开发了一个自定义操作过滤器,以便将其用于在 ASP.NET MVC 中记录我的 Web 服务的响应。但是我不知道为什么当我将此操作过滤器添加到我的方法时,我的控制器的 HTTP 状态响应更改为 500 并返回消息:500 Intenal Server Error. 我将所有逻辑都放在 try catch 块中,但问题仍然存在。

这是我的自定义 ActionFilter:

更新:进一步调查我的代码,我发现调用getBodyFromResponse会导致此错误。我自己怀疑我会尝试.Result两次读取流的部分,但是因为我复制了!来自其他地方的这段代码我不清楚它的逻辑。

Update2:这是我的控制器中的示例方法:

更新 3:替换

下线固定问题,但我不知道为什么!

0 投票
1 回答
2388 浏览

c# - ExceptionFilter 不运行 .NET Core Web Api

我对操作过滤器有疑问。我的过滤器都没有运行。我正在使用 .NET Core 2.2 并构建 Web Api。我在控制器中使用 [CustomExceptionFilter] 注册了它:

这是我的异常过滤器:

有什么问题?

0 投票
2 回答
2726 浏览

c# - .Net Core 3.1 中的自定义 ActionFilterAttribute 返回:无法解析“System.String”类型的服务

我正在将我的 .Net Core 2.2 应用程序迁移到 3.1 版。

我有以下动作过滤器:

我在 Startup.cs 文件中注册这个过滤器,如下所示:

我在我的控制器中使用过滤器,如下所示:

这个过滤器在我的 .Net Core 2.2 应用程序中运行良好。但是,现在当我尝试迁移到 3.1 版时,出现以下异常:

发生异常:CLR/System.AggregateException Microsoft.Extensions.DependencyInjection.dll 中发生“System.AggregateException”类型的未处理异常:“无法构造某些服务”找到内部异常,请参阅变量窗口中的 $exception更多细节。最里面的异常
System.InvalidOperationException:尝试激活“my_app.Filters.MyFilterAttribute”时无法解析“System.String”类型的服务。在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateArgumentCallSites(类型 serviceType,类型 implementationType,CallSiteChain callSiteChain,ParameterInfo [] 参数,布尔 throwIfCallSiteNotFound)在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.CreateConstructorCallSite(ResultCache 生命周期,类型 serviceType,类型implementationType, CallSiteChain callSiteChain) 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteFactory.TryCreateExact(ServiceDescriptor 描述符, 类型 serviceType, CallSiteChain callSiteChain, Int32 slot) 在 Microsoft.Extensions.DependencyInjection。

我尝试像这样全局添加过滤器:

但我有同样的错误。

.Net Core 在 .Net Core 3.1 中读取自定义过滤器的方式是否发生了变化?

我在迁移重大更改文档中没有看到任何相关内容。

0 投票
1 回答
316 浏览

c# - 如何在 ASP.NET MVC 中执行控制器后将数据发送到操作筛选器?

以下是我在控制器中的操作。我需要通过ProductIdQuantity过滤器SessionCheck。除了有没有别的办法TempData

以下是我的动作过滤器:

0 投票
2 回答
523 浏览

c# - 在 MVC C# 中将对象传递给 ActionFilter 构造函数

我正在尝试在我的 MVC 应用程序中创建自定义日志过滤器。以下是我的代码

在上面的代码中,我试图将服务实例传递给我的过滤器属性。如何实现将实例传递给我的自定义过滤器属性?

0 投票
1 回答
558 浏览

c# - 如何对装饰有 ServiceFilterAttribute、自定义 ActionFilter 实现的控制器进行单元测试

摘要

  • 我正在尝试使用ActionFilter实现测试控制器
  • 单元测试失败,因为在单元测试中没有调用 ActionFilter。
  • 通过 Postman 进行的测试按预期工作,并获得了正确的结果。
  • 控制器可以像这样测试还是应该转移到集成测试?

细分

我可以在单元测试中自行测试 ActionFilter,我想做的是在单元测试中测试控制器。

动作过滤器如下所示:

在启动文件中将 ActionFilter 实现添加到服务中

过滤器可以应用于任何需要检查实体是否存在的控制器方法。即GetById 方法。

在 xUnit 测试中,我设置了测试来测试控制器,如下所示:

这就是 InitializeController 方法的样子,我留下了注释行,以便它对我所尝试的内容可见,注释代码都不起作用。我嘲笑并使用了默认类。

我遇到的问题是,在运行单元测试时,永远不会调用 ActionFilter 实现,从而破坏了测试,因为 var entity = HttpContext.Items["entity_found"] as Meeting;在控制器中始终为null!更准确地说HttpContext.Items,始终为空。

ActionFilter 中的断点永远不会被击中。

当通过邮递员进行测试时,一切都按预期工作,并且断点被击中

有没有办法以这种方式将控制器作为单元测试进行测试,或者这个测试现在应该转移到集成

0 投票
0 回答
53 浏览

c# - 如何根据构造函数中传递的字符串类名对对象进行类型转换 - C#

这是我的自定义属性

从控制器的动作来看,上述属性的使用如下

在第 # 行,我需要将请求有效负载类型转换为等效的 DTO 类。

对于枚举(MetricType)中的每个条目,我都有一个同名的类(例如 ApiMetric)

如何在这里对对象进行类型转换?

0 投票
1 回答
719 浏览

asp.net-mvc - 如何使用操作过滤器读取 .Net 5 Webapi 项目中的请求正文

使用 .Net 5 WebApi,我有一个动作过滤器,我试图简单地读取请求的正文,但是当我读取 request.body 时,正文总是空的。

如何读取请求 OnActionExecuting 的正文文本(例如 Debug.Write(body))并使其不为空?

我的自定义过滤器:

我的 API 控制器:

启动.cs

SomeData 对象

我发布的 Json

0 投票
2 回答
95 浏览

c# - 从 DI 容器中注册具有多种类型的通用动作过滤器

我正在研究一个Asp.net core 5有针对性的.net 5. 我用了Action filteras generic。如果任何其他 对象model在. 如果对象存在或不存在,则泛型类型将替换为要签入的实体名称。IdIdTEntityTEntity

我尝试了什么:

我如何将它与动作一起使用:

第一个例子:

第二个例子:

问题: 当我尝试注册ShouldExistFilterinConfigureServices方法时,我必须将它注册到可能与 the 一起使用的所有实体中,filter这对我来说不实用,因为我有很多实体。

现在我应该这样做:

问题:

如何注册ShouldExistFilter一次DI Container并与任何一次一起使用Type?或者有什么办法可以到达我的对象?

0 投票
1 回答
144 浏览

c# - 在 Action filter Asp.net core 5 中,没有为类型“System.Int32”和“System.String”定义二元运算符 Equal

我正在做一个Asp.net core 5项目。我创建了一个action filter适用于HttPost特别是 的操作create,此过滤器将检查数据库中是否已存在具有从model.

我如何使用它: 过滤器应该接收entity要签入的,以及要签入的属性名称,以及在存在记录的情况下显示entity错误消息。

过滤器定义: 我觉得有点复杂

与动作一起使用的示例:

问题:

问题出在Action我收到此错误 InvalidOperationException:未为类型“System.Int32”和“System.String”定义二元运算符 Equal。System.Linq.Expressions.Expression.GetEqualityComparisonOperator(ExpressionType binaryType,字符串 opName,表达式左,表达式右,bool liftToNull)

错误画面: 在此处输入图像描述

请帮助解决这个问题?