问题标签 [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 回答
1704 浏览

c# - Asp.net Core 自定义过滤器实现 IActionModelConvention 和 IFilterFactory

我需要创建一个自定义操作过滤器来实现IActionModelConventionIFilterFactory

IActionModelConvention用来同时设置多条路由,我IFilterFactory用来注入一些我需要使用的服务。

问题Apply()来自 的方法在来自的方法IActionModelConvention之前被调用,并且我需要注入的服务在.CreateInstance()IFilterFactoryApply()

我的问题是如何在Apply()调用方法之前注入服务?而且我也更喜欢使用IFilterFactory注入服务,因为它不会强迫我用[ServiceFilter]or属性包装实际[TypeFilter]属性。

这是我的代码:

0 投票
1 回答
329 浏览

c# - RedirectToAction MVC 5 - T4MVC 上的 ActionExecutingContext.ActionParameters NULL

我有一个重定向,例如:

这重定向到一个控制器,该控制器继承自另一个控制器,该控制器具有如下定义的动作过滤器:

ActionExecutingContext.ActionParameters 包含机构 ID,但值始终为 NULL。我也尝试过重定向到路由,但这给出了相同的输出。困扰我的是,当我查看路线时,机构Id 似乎是通过查询参数传递的(Area/Controller?institutionId=17 而不是 Area/Controller/17)

MVC 代表 T4MVC,它是用于避免在重定向中硬编码字符串的框架。

0 投票
1 回答
2364 浏览

c# - 在 asp.net core web api 中处理多个连接字符串作为参数

在我的一个应用程序中,我遇到了用户必须从前端选择需要使用的数据库的情况。

然后在每个请求中,所选值作为参数传递,因为所有都是web api调用,并且需要根据所选数据库建立连接。

所以目前我正在编写代码来初始化每个action method. 喜欢 :-

我也可以创建一个单独的method,它会为我做同样的事情,但我确实需要method每次都为所有actions.

这里我也有一个constructorwith DI

我的问题是没有其他更好的方法可以做到这writing/calling一点action。我相信应该有,但我无法通过它。

我正在寻找的东西是:-

  • 任何方式都可以通过注入来实现DI
  • 任何初始化方式constructor
  • 无论如何action filters
  • 或者任何更好的方法。
0 投票
1 回答
1016 浏览

c# - 覆盖特定的操作过滤器

在我的 WebApi 2 应用程序中,我的基本控制器中有一个操作过滤器属性,该属性具有一个布尔属性,其默认值可以在构造函数中设置:

我还在CustomValidatorFilterwebApi config 中进行了配置:

在我的控制器的某些操作中,我想通过设置 to 的值来覆盖 MyActionFilterAttribute 的行为MyPropertyfalse我已将其添加OverrideActionFilters到我的操作中:

但是现在我的自定义验证由于使用而不再起作用OverrideActionFilters,有没有办法重新定义 OverrideActionFilters,或者只是列出要覆盖的过滤器。谢谢您的帮助。

0 投票
1 回答
86 浏览

asp.net-core - 我们可以让 ActionFilter 扩展 Enumasp核心2

我是 Asp Core 的新手,我尝试实现一个IActionFilter扩展枚举类型的

并且在控制器中

我试了一下,我偶然发现了一个异常

我试图将 Startup.cs 更改为:

没有任何效果,除非我将 IndexFilter 设置为与控制器匹配:

这使得 Enumerable 类的行为就像一个普通类。

0 投票
0 回答
215 浏览

asp.net - Web api 操作过滤器中设置的 CallContext 值不会流向控制器操作

我有一个 asp.net web api,我们在全局操作过滤器的 OnActionExecuting 中使用 TransactionScope(仅用于 POST、PUT 和 DELETE,但不适用于 GET)启动事务,然后在 OnActionExecuted 中完成或回滚它。最近我们决定进行更改,以便我们可以为至少 GET 调用添加 SqlAzureExecutionStrategy(因为它仅在没有用户发起的事务时才有效),以便可以处理临时故障以进行数据获取。我按照这里的文章并在我们的应用程序中实现了同样的事情。下面是代码。

创建了一个新的数据库配置类

每当我们需要启动事务时,将 suspendExecutionStrategy 设置为 true。

问题是在 OnActionExecuting 中正确设置了 SuspendExecutionStrategy 的值,但是当代码进入 Controller 操作或 OnActionExecuting 时,它始终为 false。

我做了一些调查,并意识到当我们从过滤器移动到控制器操作时,执行上下文本身会发生变化。因此,如果在 OnActionExecuting 我检查 Thread.CurrentThread.ExecutionContext.ToStringJson() 我看到 SuspendExecutionStrategy 的值可用,但如果我在控制器操作中检查相同的值,它不可用,奇怪的是执行上下文中的其他所有内容仍然可用.

OnActionExecuting 中 Thread.CurrentThread.ExecutionContext.ToStringJson() 的值

Controller Action 和 OnActionExecuted 中 Thread.CurrentThread.ExecutionContext.ToStringJson() 的值

所以我的问题是执行上下文如何从动作过滤器更改为控制器动作,以及执行上下文中的所有其他值如何仍然保留。

0 投票
1 回答
3966 浏览

asp.net-core-webapi - 在 web api asp.net core 中的 OnActionExecuted 中修改 ActionExecutedContext 的结果

我正在写custom filter我的Web API,我想修改方法ActionExecutedContext内部的结果OnActionExecuted

我得到了OkObjectResult返回action method的结果类型IActionResult

那么在这里如何将其转换OkObjectResult为我的模型Object,以便我可以使用properties和操作这些值。

感谢任何建议。

0 投票
2 回答
7852 浏览

c# - 从 OnActionExecutionAsync 返回而不在 asp.net 核心中执行操作

在这里,我想从 in 返回custom action filter而不执行controller action methodin asp.net core WEB API

以下是我对样品的要求code

我已经搜索并找到了一些相关的问题和答案,但对我没有任何帮助。

找到了这个await base.OnActionExecutionAsync(context, next);,但它跳过了剩余的逻辑filters并直接执行controller action所以不适用于我的场景。

0 投票
2 回答
2147 浏览

c# - 未调用 ASP.NET Core 操作筛选器

我有一个 ASP.NET Core API (.Net Core 2.1),我使用这篇文章实现了一个动作过滤器

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters?view=aspnetcore-2.1#action-filters

在我的模型中,我使用数据注释来验证模型,并为控制器中的操作添加了 ValidateModel 属性。

我使用 Postman 对此进行了测试,并且仅当模型有效时才会调用我的动作过滤器。如果我的请求缺少必填字段或某些值超出范围,则不会调用操作筛选器。相反,我收到一个 400 错误请求,响应中包含模型状态。

我实现了动作过滤器,因为我想自定义我的模型验证错误。我的理解是动作过滤器在模型绑定时被调用。有人可以帮我弄清楚为什么会发生这种情况以及如何让动作过滤器工作吗?

更新:我在发布问题 2 秒后找到了解决方案,下面发布的链接 @Silvermind 也是很好的信息。

我将以下行添加到我的 Startup.cs

它在 Microsoft 网站上有详细记录。 https://docs.microsoft.com/en-us/aspnet/core/web-api/index?view=aspnetcore-2.1#automatic-http-400-responses

0 投票
0 回答
152 浏览

asp.net-mvc - 应用于控制器时,MVC 属性不适用于单个操作

我有一个自定义属性定义如下,

并用它来装饰控制器如下,

现在我期望它应该应用于控制器内的所有操作,

但是当我打电话给这个时,filterContext.ActionDescriptor.GetCustomAttributes(typeof(SkipAuthentication), false).Any()我把它理解为false我错过了什么?