首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绑定前编辑Request.Form

绑定前编辑Request.Form
EN

Stack Overflow用户
提问于 2009-07-29 19:27:23
回答 2查看 531关注 0票数 1

在动作方法绑定到参数之前,有没有办法编辑Request.Form?我已经有一个反射调用来启用对Request.Form的编辑。我只是找不到一个可扩展的点,在绑定发生之前我可以修改它。

更新:所以看起来我正在编辑Request.Form,但并没有意识到这一点。我是通过查看绑定参数来验证的。这是不正确的b/c当您到达ActionFilter时,表单值已经被复制/设置到/在ValueProvider中。我认为这就是值被提取以进行绑定的地方。

因此,问题变成了在表单值被绑定之前,什么是对表单值应用过滤的最佳方式。我仍然希望绑定发生。我只想编辑它用来绑定的值。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-02 11:44:44

最后,我在DefaultModelBinder上扩展了SetProperty方法,以便在继续执行基本行为之前检查该值。如果值是一个字符串,我将执行过滤。

代码语言:javascript
复制
public class ScrubbingBinder : DefaultModelBinder
{
    protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
    {
        if (value.GetType() == typeof(string))
            value = HtmlScrubber.ScrubHtml(value as string, HtmlScrubber.SimpleFormatTags);
        base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2009-07-29 20:13:13

创建自定义筛选器并覆盖OnActionExecuting()

代码语言:javascript
复制
public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
    }
}

或者简单地覆盖控制器中的OnActionExecuting()

更新:

代码语言:javascript
复制
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    var actionName = filterContext.ActionDescriptor.ActionName;

    if(String.Compare(actionName, "Some", true) == 0 && Request.HttpMethod == "POST")
    {  
        var form = filterContext.ActionParameters["form"] as FormCollection;

        form.Add("New", "NewValue");
    }
}

public ActionResult SomeAction(FormCollection form)
{
    ...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1202495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档