问题标签 [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 投票
2 回答
309 浏览

asp.net - ASP.Net MVC 中数据库项的分组预加载

想象一下,您在 ASP.Net MVC 中有一个嵌入了多个局部视图,它们独立工作并通过(子操作)View加载自己的模型。Html.Action现在每个单独的部分视图都需要从数据库中加载某些项目。就性能而言,将所有此类数据库调用组合在一起并使用一个查询而不是通过每个单独的子操作逐个预加载相同类型的所有项目会更有效。

例如,假设我们有以下结构:

  • 索引(查看)
    • 主菜单(子操作/部分视图)
      • 这将加载 ID 为 1 和 2 的部分
    • 主要内容(儿童动作/局部视图)
      • 这将加载 ID 为 3、4 和 5 的部分
    • 相关部分(儿童行动/部分视图)
      • 这将加载 ID 为 6 和 7 的部分
    • ...

现在在上述场景中,上面的每个子操作将分别进行各自的数据库调用以加载其自己的模型所需的部分。

为了提高性能,我们需要一种方法,在我们执行每个动作或子动作之前,此类数据库项目请求被“注册”,然后能够一起加载所有项目。然后,当 Action 或 Child Action 需要使用此类数据库项目时,它们将已经完全预加载。

我们正在考虑使用附加到每个动作和子动作的动作过滤器,说明请求了哪些项目,但不幸的是,该OnActionExecuting方法在每个动作被调用之前被单独调用。

我们想要类似于动作过滤器的东西,但不是在每次调用之前执行,而是在调用任何动作/子动作之前在请求的开头执行。通过这种方式,我们可以注册所有此类数据库项目需求并将它们一起加载。

类似于OnInitAsp.Net Web 窗体中的事件,首先调用所有用户控件和控件的 OnInit,然后调用 ASP.Net Web 窗体生命周期中的其他事件。


或者,也许您可​​以提供与我们要求类似的不同解决方案?

0 投票
1 回答
95 浏览

c# - 应该先定义哪个自定义授权动作过滤器或OutputCache动作过滤器

我有以下操作方法:-

第一个动作过滤器将缓存数据 120 秒,而第二个动作过滤器将执行自定义授权检查,如果授权失败,将返回 _unauthrized 视图,如下所示:-

所以我的问题是天气动作过滤器的顺序?那么先做 Outputcache 然后自定义授权,与先做自定义授权然后 outputcache 不同吗?谢谢

0 投票
2 回答
1916 浏览

asp.net-mvc - 不同动作的相同动作过滤器

我正在实现一个从 AuthorizeAttribute 继承的自定义授权过滤器。经过我的研究,我发现动作过滤器被缓存了,所以它们只被实例化一次。

这是我的问题。如果我实现并使用如下所示的自定义操作过滤器,它应该无法正常工作,因为它会被实例化一次并且永远不会再次调用构造函数。但是当我测试时,它运行良好,所以我想有一些我不知道的东西。

谁能清楚地解释这个(动作过滤器生命周期?)?

0 投票
1 回答
1622 浏览

asp.net - 带有动态数据的 ASP.NET MVC 4 自定义操作过滤器

因此,我正在构建一个 Web 应用程序,一旦完成,我就想出售它。它允许用户在管理面板中输入数据,例如他们的网站名称、元关键字、他们的联系电子邮件、电话、地址等。我编写了一个操作过滤器,以便在我放置过滤器的每个请求中包含这些值,因此我不必每次都查询它们,因为这些值包含在整个站点的公共页脚中。但是,我了解到,如果我用这些值的新信息或不同信息更新数据库,它不会在网页上更新,我猜这是因为操作过滤器是在应用程序启动时配置的。在操作过滤器中,我使用存储库模式来查询这些值。我在下面包含了操作过滤器的代码。我怎样才能拥有操作过滤器的便利,但能够在数据库中的数据发生变化时动态更新它?谢谢!

0 投票
3 回答
3838 浏览

asp.net - 带有 StructureMap 的 Asp.Net MVC 5 自定义动作过滤器

我在我的“LogAttribute”类中使用结构映射在asp.net mvc custom acitonfilte中遇到问题我有setter依赖注入,当执行我的customfilterclass的“OnActionExecuted”方法时,它是空的,它是“LogAttribute”

我的 LogAttribute 类代码是

我创建另一个类,从中我将值传递给 setter 依赖属性

我的依赖解析器类代码是

我的 global.ascx 代码是

0 投票
1 回答
449 浏览

asp.net-mvc - ASP.NET MVC 自定义操作筛选器未重定向

我正在尝试使用如下操作过滤器将会话过期的用户重定向到登录页面:

当 base.OnActionExecuting(filterContext) 被处理时,Firefox 浏览器只收到这些答案,而不是重定向到登录页面:

这些.js文件是我渲染到登录页面的文件。

有人可以帮忙吗?

Tks

0 投票
1 回答
71 浏览

asp.net-mvc-5 - 实体(用户等)的门控创建取决于数据库 MVC5 中的现有计数

我有一个管理员可以创建新用户的应用程序。仅当现有用户数少于管理员允许的数量时才能创建新用户(在帐户表中的数据库中设置的值)

现在我可以轻松地创建一个操作过滤器来检查现有用户数,并根据它返回一个 HttPStatusCodeResult 用于错误请求或 UnAuthorizedResult。

但我想要的是“创建按钮”也应该被禁用。创建按钮位于索引视图上。我还可以通过创建一个自定义 html 帮助程序来做到这一点,该帮助程序根据数据库中现有用户的数量将按钮呈现为禁用状态。

但更进一步,我还有其他实体创建需要根据数据库中现有实体的数量进行门控。

我想找出一种在整个应用程序中执行此操作的标准方法,而不是为每个需求创建一个单独的 ActionLink 帮助程序和一个单独的 ActionFilter。

任何指针将不胜感激。

谢谢

0 投票
0 回答
138 浏览

asp.net-web-api - 如何在 WebAPI 操作上选择性地启用 JSONP?

我正在使用 ASP.NET Web API v2.0 来构建 Web api。

我需要在 CORS/JSONP 中提供一些控制器/操作,所以我选择使用 WebApiContrib.Formatting.Jsonp。

因为我还没有使用Web API v2.1,所以我只能使用WebApiContrib v0.9.7.0。

如果我在 Global.ascx.cs 中添加 JSONP 格式化程序,它将打开我所有的 CORS/JSONP 控制器和操作,因此我在下面编写了操作过滤器以在特定时间添加和删除格式化程序。

现在,我的问题是,如果有多个请求进入,该代码是否是线程安全的?

0 投票
1 回答
137 浏览

c# - 没有 MVC 的 ActionFilterAttribute 行为

我正在查看我们项目中特定库中的一些代码。这个库包含可能来自也可能不来自 MVC 的 API 调用。其中许多以完全相同的代码开始...保存当前的延迟加载值,然后将其关闭。在这些方法结束时,延迟加载将恢复到其原始值。

我想要做的是在这些方法上添加某种属性来处理这个问题。由于它是一个库而不是 MVC 代码,因此 ActionFilterAttributes 不可用,并且在此库中添加对 MVC 的引用在架构上似乎相当不合适。还有什么我可以用来表现类似的东西(即,向方法添加一个属性,以便与该属性关联的代码在方法的开头和结尾运行)?

0 投票
0 回答
2574 浏览

c# - 抛出异常 ActionFilterAttribute OnActionExecuting

我想在 ActionFilterAttribute 中抛出一个异常,如下所示:

我想要这样,因为我想在一些ajax请求中执行这段代码,当用户没有权限时,发送一个异常然后显示一条消息。

我已经实现了在异常中显示消息的代码,它适用于应用程序其他地方的异常,但是当在 ActionFilterAttribute 的 OnActionExecuting 中引发异常时,应用程序中出现未处理的异常,以及我得到了什么该视图是服务器错误。

如何在不重定向到另一个页面的情况下处理异常?我只想抛出异常,不显示 404 错误页面。

编辑:

把事情放在上下文中:我有一个带有一些 ajax 调用的网页,我希望 ajax 调用有一个行为,以防在调用时发生错误,所以我在所有的 ajax 中都有这样的东西:

此代码显示一个带有友好用户消息的模式窗口,错误原因是:会话已过期。错误的电子邮件地址等。

我想使用相同的代码进行验证。通过验证,我正在考虑使用 ActionFilterAttribute。

但我无法从 OnActionExecuting 中获取如何发送和异常。

这可能吗?或者我必须返回一个特定的 Json,然后在 javascript 中根据返回的 json 操作?