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

asp.net - 从 ActionFilter 中止/取消操作和响应的最佳方法

从 ActionFilter 中止/取消操作的最佳方法

我有这个ActionFilter,它应该立即结束连接并返回 401 Unauthroized:

我了解了如何通过在此处设置“context.Result = new EmptyResult()”来取消执行操作但我不确定这是否是刷新响应和关闭连接的最佳方式。

0 投票
2 回答
459 浏览

asp.net-mvc - Enforce security check in ASP.NET MVC?

I am implementing a collaborative web gallery, and I have a few roles for each user:

  1. Admin
  2. DeleteImage
  3. DeleteOwnImage
  4. etc..

For any controller-action, we can apply [Authorize] tag to them plus which roles we want to allow, right? It is fine for Admin/DeleteImage since these two are global; but my question is, like DeleteOwnImage is kind of contextual, in order to determine whether it is valid, we need:

  1. To know what image it is trying to delete (from request)
  2. Retrieve the owner of that image (from service or repository)
  3. Compare current user = that owner

Obviously [Authorize] is not enough to do so, but is it possible to do that on custom ActionFilters? Any hint?

0 投票
1 回答
5070 浏览

asp.net-mvc - 如何全局设置 ValidateAntiForgeryToken

首先是安全。

MVC 最佳实践建议将[ValidateAntiForgeryToken]属性添加到每个[HttpPost]操作。

如何在应用程序的一个独特点执行此规则?

0 投票
2 回答
539 浏览

asp.net-mvc - 我可以使用全局过滤器处理不同的多租户吗?

我有一个已实现成员资格的 asp.net mvc 应用程序。因此,用户必须登录。每个用户都属于一个组织(多租户)。

我将如何在全球范围内处理组织参数?我认为这对于全局过滤器可能是一件好事,因为需要为给定组织过滤所有数据。并且组织与用户名连接但不在同一个表中。

例如我有一个这样的索引操作

我正在考虑有一个全局属性,它可以根据给定的用户名查询组织的数据库。由于我的控制器已经包含授权属性,所以我有用户名。缓存组织(会话,控制器上下文)而不是在每个请求上从 db 查询组织会很好。

这是一种实现这样的方法吗?或者还有其他更好的方法吗?以及如何从过滤器中设置控制器/控制器上下文的属性?

所以关于这个的任何想法以及评论都会很棒......

0 投票
3 回答
3115 浏览

asp.net-mvc - 动作过滤器中的 UnitOfWork 似乎正在缓存

我有一个使用 IoC (Unity) 的 MVC 3 站点,并且我的模型是使用 EF4 和 POCO 生成的。我正在使用动作过滤器来提交我的 UnitOfWork:

然而,即使Commit()似乎被解雇了,它似乎也在缓存它认为“脏”的东西。

例如,在我的控制器中,从服务类执行以下命令:

每当我重新构建解决方案并点击此控制器操作时,实际上都会提交更改。但是,对控制器的连续点击不会做任何事情。

另一方面,如果我在我的控制器中放置一个 UnitOfWork 并在服务方法调用之后提交它,它会按预期工作(每次我请求控制器操作时):

因此,似乎某种缓存正在发生,但我无法弄清楚缓存了什么——UnitOfWork、ActionFilter 或存储库。

任何想法可能会发生什么?如果没有,有什么想法我还能做些什么来解决问题?

提前致谢。

0 投票
2 回答
5618 浏览

asp.net-mvc - 有关 HttpContext、HttpContextBase 和操作过滤器的问题

我正在尝试在一个静态类上构建一个静态属性,该属性基本上会返回一个 cookie 值,以便在我的 MVC 站点(MVC 3,如果重要的话)中使用。像这样的东西:

我需要从控制器操作、global.asax 方法和操作过滤器中访问它。但问题是,当动作过滤器运行时,HttpContext 不可用。现在,我必须有一个单独的静态方法才能从我传入的过滤器上下文中提取 cookie,这看起来很尴尬。

构建这样一个静态方法来检索这样的 cookie 值的最佳解决方案是什么,该方法适用于控制器操作和操作过滤器?或者有没有更好的方法来做这样的事情?

提前致谢。

0 投票
1 回答
3696 浏览

asp.net-mvc-3 - MVC 3 依赖注入与 Ninject 2.2 + 全局动作过滤器

我正在尝试使用 ASP.NET MVC 3 和 Ninject 2.2 将记录器对象注入自定义 ActionFilterAttribute。

如果我用自定义属性标记每个控制器,我就能让它工作。

但是,如果我从控制器中删除属性装饰并尝试使用全局操作过滤器,我将无法使其工作。

这是代码:

在 App_Start - NinjectMVC3.cs 下

}

全球.asax.cs

}

TestLoggingAttribute.cs

家庭控制器.cs

就像我提到的,如果我取消注释控制器中的 [TestLogging] 属性,这一切都有效。但是我想改用全局过滤器。有人可以帮我吗?

0 投票
1 回答
3278 浏览

asp.net-mvc - 如何将 HandleError 与模型状态错误一起使用

我想使用自定义操作过滤器来处理来自我的服务类的特定异常以填充模型状态,然后返回视图。

例如,以我之前的代码为例:

基本上,它会调用服务,如果抛出 ServiceException,它会知道模型数据存在问题,并将错误添加到 ModelState,然后返回视图。但我注意到了一些非常不像 DRY 的模式,因为我在每个操作方法中都有相同的 try/catch 代码。

因此,为了稍微干燥一下,我基本上创建了一个新的 HandleServiceError 操作过滤器:

然后像这样简化了我的操作方法:

问题是,一旦动作过滤器处理了错误,它就不会返回到我的动作方法。我有点理解,在幕后,为什么会发生这种情况。但我仍然想找到一种方法来做我想做的事情。

这可能吗?

提前致谢。

更新:

我尝试了Darin在他的回答中提供的文章中的建议,但在尝试将构造函数注入与控制器的模型状态一起使用时遇到了问题。

例如,如果您查看他们的 Controllers\ProductController.cs 代码,他们有控制器的空构造函数,使用服务定位器创建服务,此时传入控制器的 ModelState:

但是如果你查看注入的构造函数,它假定 ModelState 将被注入到服务的构造函数中:

我不知道如何让 CI 与当前控制器的 ModelState 一起工作。如果我能弄清楚这一点,那么这种方法可能会奏效。

0 投票
2 回答
1796 浏览

asp.net-mvc-3 - 使用 MVC 3 依赖注入和 Ninject 2.2 将全局操作过滤器绑定到区域中的所有控制器

由于我在这篇文章中获得的帮助,我能够使用 ASP.NET MVC 3 和 Ninject 2.2 将记录器对象注入到自定义 ActionFilterAttribute 中。

现在我想将我的自定义 ActionFilterAttribute 仅绑定到特定区域中的所有控制器。

我能够开始使用以下绑定,但它只处理某个区域的一个控制器。我希望我的代码绑定到特定区域中的所有控制器。有任何想法吗?

0 投票
1 回答
132 浏览

asp.net-mvc-3 - asp.net mvc 全局 vs 类过滤器

我的 MVC 3 应用程序在类级别授权过滤器。据我了解,当我尝试 /Home/Index 并且我没有登录时,它应该将我重新路由到我指定的页面 - 我的登录页面。

我的应用程序没有这样做,我可以看到 Home/Index 没有登录的结果;但是,当我在全局范围内注册过滤器时,授权步骤会按预期启动。

有任何想法吗?