问题标签 [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.
c# - ASP.NET MVC:为什么我的自定义 ActionFilter 会更改我的 HTTP 响应代码?
我开发了一个自定义操作过滤器,以便将其用于在 ASP.NET MVC 中记录我的 Web 服务的响应。但是我不知道为什么当我将此操作过滤器添加到我的方法时,我的控制器的 HTTP 状态响应更改为 500 并返回消息:500 Intenal Server Error
. 我将所有逻辑都放在 try catch 块中,但问题仍然存在。
这是我的自定义 ActionFilter:
更新:进一步调查我的代码,我发现调用getBodyFromResponse
会导致此错误。我自己怀疑我会尝试.Result
两次读取流的部分,但是因为我复制了!来自其他地方的这段代码我不清楚它的逻辑。
Update2:这是我的控制器中的示例方法:
更新 3:替换
下线固定问题,但我不知道为什么!
c# - ExceptionFilter 不运行 .NET Core Web Api
我对操作过滤器有疑问。我的过滤器都没有运行。我正在使用 .NET Core 2.2 并构建 Web Api。我在控制器中使用 [CustomExceptionFilter] 注册了它:
这是我的异常过滤器:
有什么问题?
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 中读取自定义过滤器的方式是否发生了变化?
我在迁移重大更改文档中没有看到任何相关内容。
c# - 如何在 ASP.NET MVC 中执行控制器后将数据发送到操作筛选器?
以下是我在控制器中的操作。我需要通过ProductId
和Quantity
过滤器SessionCheck
。除了有没有别的办法TempData
?
以下是我的动作过滤器:
c# - 在 MVC C# 中将对象传递给 ActionFilter 构造函数
我正在尝试在我的 MVC 应用程序中创建自定义日志过滤器。以下是我的代码
在上面的代码中,我试图将服务实例传递给我的过滤器属性。如何实现将实例传递给我的自定义过滤器属性?
c# - 如何对装饰有 ServiceFilterAttribute、自定义 ActionFilter 实现的控制器进行单元测试
摘要:
- 我正在尝试使用ActionFilter实现测试控制器
- 单元测试失败,因为在单元测试中没有调用 ActionFilter。
- 通过 Postman 进行的测试按预期工作,并获得了正确的结果。
- 控制器可以像这样测试还是应该转移到集成测试?
细分:
我可以在单元测试中自行测试 ActionFilter,我想做的是在单元测试中测试控制器。
动作过滤器如下所示:
在启动文件中将 ActionFilter 实现添加到服务中
过滤器可以应用于任何需要检查实体是否存在的控制器方法。即GetById 方法。
在 xUnit 测试中,我设置了测试来测试控制器,如下所示:
这就是 InitializeController 方法的样子,我留下了注释行,以便它对我所尝试的内容可见,注释代码都不起作用。我嘲笑并使用了默认类。
我遇到的问题是,在运行单元测试时,永远不会调用 ActionFilter 实现,从而破坏了测试,因为 var entity = HttpContext.Items["entity_found"] as Meeting;
在控制器中始终为null!更准确地说HttpContext.Items
,始终为空。
ActionFilter 中的断点永远不会被击中。
当通过邮递员进行测试时,一切都按预期工作,并且断点被击中
有没有办法以这种方式将控制器作为单元测试进行测试,或者这个测试现在应该转移到集成?
c# - 如何根据构造函数中传递的字符串类名对对象进行类型转换 - C#
这是我的自定义属性
从控制器的动作来看,上述属性的使用如下
在第 # 行,我需要将请求有效负载类型转换为等效的 DTO 类。
对于枚举(MetricType)中的每个条目,我都有一个同名的类(例如 ApiMetric)
如何在这里对对象进行类型转换?
asp.net-mvc - 如何使用操作过滤器读取 .Net 5 Webapi 项目中的请求正文
使用 .Net 5 WebApi,我有一个动作过滤器,我试图简单地读取请求的正文,但是当我读取 request.body 时,正文总是空的。
如何读取请求 OnActionExecuting 的正文文本(例如 Debug.Write(body))并使其不为空?
我的自定义过滤器:
我的 API 控制器:
启动.cs
SomeData 对象
我发布的 Json
c# - 从 DI 容器中注册具有多种类型的通用动作过滤器
我正在研究一个Asp.net core 5
有针对性的.net 5
. 我用了Action filter
as generic
。如果任何其他
对象model
在. 如果对象存在或不存在,则泛型类型将替换为要签入的实体名称。Id
Id
TEntity
TEntity
我尝试了什么:
我如何将它与动作一起使用:
第一个例子:
第二个例子:
问题:
当我尝试注册ShouldExistFilter
inConfigureServices
方法时,我必须将它注册到可能与 the 一起使用的所有实体中,filter
这对我来说不实用,因为我有很多实体。
现在我应该这样做:
问题:
如何注册ShouldExistFilter
一次DI Container
并与任何一次一起使用Type
?或者有什么办法可以到达我的对象?
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)
请帮助解决这个问题?