Tag: action filter

如何在NopCommerce中实现动作filter

我想从CheckoutController更改OpcSaveBilling操作的一些代码中的一些代码。 我不想改变NopCommerce的核心代码,所以我需要尝试使用我自己的自定义代码覆盖代码。 我读过这篇文章是为了让我开始http://www.pronopcommerce.com/overriding-intercepting-nopcommerce-controllers-and-actions 。 根据我的阅读,您可以在执行操作之前和执行操作之后执行自己的代码。 但我没有得到的是文章留下的部分(需要执行的实际代码)。 我基本上想要的是原始代码的相同function,但有一些自定义调整。 我在OnePageCheckout视图中添加了一个复选框,根据该复选框,它需要在结帐时跳过输入送货地址部分。 (使用送货地址的帐单邮寄地址) 我已经在核心代码和这项工作中添加了代码并跳过了这一步(注意:我知道我仍然需要手动添加帐单地址作为送货地址)但是就像我说我不想改变代码NopCommerce的核心,但覆盖它。 如果我的问题不可理解,您需要更多代码或解释,我很乐意提供更多。 如果我这样做的方式不适合我想要的,如果你告诉我,我将不胜感激! 我的代码: Action Filter类: using Nop.Web.Controllers; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web.Mvc; namespace Nop.Plugin.Misc.MyProject.ActionFilters { class ShippingAddressOverideActionFilter : ActionFilterAttribute, IFilterProvider { public IEnumerable GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) { if (controllerContext.Controller is CheckoutController && actionDescriptor.ActionName.Equals(“OpcSaveBilling”, StringComparison.InvariantCultureIgnoreCase)) { return new […]

MVC Action Filter使用传递给for ActionResult的参数?

我创建了一个没有问题的自定义Action Filter 。 但我想修改Action Filter以使用实际传递给我的方法的一些参数。 所以,如果我有以下方法: [HttpPost] [MyAttribute] public ActionResult ViewUserDetails(Guid userId) { // Do something } 如何从MyAttribute访问userId? 有没有办法可以直接传递它?

Web API ActionFilter修改返回的值

我有一个Web API应用程序,我需要通过ActionFilter的OnActionExecuted方法获得一些API端点的返回值 我正在使用自定义属性来标识具有我需要修改的数据的端点,但我似乎无法从HttpActionExecutedContext中找到实际的结果对象。 谢谢你的帮助!

MVC中的属性和filter有什么区别

现在,我可以请一个比较,而不仅仅是一个定义。 例: SomeClassAttribute (or ISomeClassAttribute) VS SomeClassFilter (or ISomeClassFilter) 我觉得它们可以以相同的方式使用,但一般来说“应用属性”和“filter是它们产生的function”。 所以我可以“为方法(或类或其他)添加属性以应用filter。

对所有控制器操作强制执行操作筛选(C#/ ASP.NET MVC)

我创建了一个新的动作filter(属性,类似于[Authorize]),它根据会话值授权访问控制器动作。 但是,我基本上用该属性装饰我的所有控制器动作(除了极少数)。 所以,我认为除了在将[ExemptFromAuthorize]属性附加到控制器动作的情况下, 总是执行Action Filter会更好吗? (也许通过inheritance我自己的Controller类?) 我怎样才能做到这一点?

Asp.net Web API – 从actionfilter返回数据

我想从wep api actionfilter返回一个json对象。 我怎样才能做到这一点? 我可以从操作返回对象,但我需要在某些条件下从actionfilter返回一些数据。 提前致谢。 编辑:1当我更改如下代码时,浏览器仍然加载没有任何响应,并以超时错误结束。 public class ValidationActionFilter : ActionFilterAttribute { public override void OnActionExecuting(HttpActionContext actionContext) { var modelState = actionContext.ModelState; if (!modelState.IsValid) { List arr = new List(); foreach (var key in modelState.Keys) { var state = modelState[key]; if (state.Errors.Any()) { string er = state.Errors.First().ErrorMessage; if (!string.IsNullOrEmpty(er)) { arr.Add(er); } } } […]

在MVC3中的每个Action之前运行一个方法

如何在MVC3中运行每个Action之前运行一个方法? 我知道我们可以使用以下方法进行OnActionExecuting : public class ValidateUserSessionFilterAttribute : ActionFilterAttribute { public override void OnActionExecuting(ActionExecutingContext filterContext) { … } } 但是,我们怎样才能在ActionExecuting之前运行一个方法?

是否可以覆盖ASP.NET MVC中的默认行为?

我想知道是否/如何覆盖ASP.NET MVC中的默认[Authorize]行为。 我知道我可以创建一个新的Action Filter,创建自己的属性等等; 我只是感兴趣,如果我可以简单地更改[授权]行为并用我自己的代码替换它的工作? 编辑 :男孩和女孩。 感谢您的意见,但正如我所写,我不打算引入新的[XYZAuthorize]属性。 我知道怎么做。 我想保留[授权]符号,但只是改变它的工作原理。

ASP.NET MVC:如何创建一个动作filter来输出JSON?

我在ASP.NET MVC的第二天,也是我第一次在SO上请求代码(是的,快捷方式)。 我正在寻找一种方法来创建一个filter,拦截一个Action的当前输出,而不是输出JSON(我知道其他方法,但这是为了帮助我理解filter)。 我想忽略与该操作相关的任何视图,只需抓取ViewData [“Output”],将其转换为JSON并将其发送出客户端。 空白填补: TestController.cs: [JSON] public ActionResult Index() { ViewData[“Output”] = “This is my output”; return View(); } JSONFilter.cs: public override void OnActionExecuting(ActionExecutingContext filterContext) { /* * 1. How to override the View template and set it to null? * ViewResult { ViewName = “” } does not skip the view (/Test/Index) […]

MVC 3压缩filter导致输出乱码

所以,我有一个名为CompressAttribute的自定义属性,它被设置为global.asax中的全局filter。 它使用reflection来检查当前操作方法的返回类型,如果它是“ViewResult”,它使用GZip或Deflate压缩输出。 它工作得很好,除非页面抛出500服务器错误。 如果遇到错误,而不是显示.NET错误页面,我得到一堆: `我%/米{JJT 显然它正在尝试编码导致问题的500 Server Error页面。 处理这个问题的最佳方法是什么? 这是filter代码: public override void OnActionExecuting(ActionExecutingContext filterContext) { MethodInfo actionMethodInfo = Common.GetActionMethodInfo(filterContext); if (GetReturnType(actionMethodInfo).ToLower() != “viewresult”) return; HttpRequestBase request = filterContext.HttpContext.Request; string acceptEncoding = request.Headers[“Accept-Encoding”]; if (string.IsNullOrEmpty(acceptEncoding)) return; acceptEncoding = acceptEncoding.ToUpperInvariant(); HttpResponseBase response = filterContext.HttpContext.Response; if (acceptEncoding.Contains(“GZIP”)) { response.AppendHeader(“Content-encoding”, “gzip”); response.Filter = new WebCompressionStream(response.Filter, CompressionType.GZip); } else […]