Редактировать запрос. Форма перед связыванием - PullRequest
1 голос
/ 29 июля 2009

Есть ли способ отредактировать Request.Form до того, как метод действия будет привязан к параметрам? У меня уже есть рефлексия, чтобы включить редактирование Request.Form. Я просто не могу найти точку экстенсибилизации, где я могу изменить ее до того, как произойдет привязка.

ОБНОВЛЕНИЕ: Похоже, я редактировал Request.Form и не понял этого. Я проверял, глядя на связанные параметры. Это неверно, поскольку к моменту, когда вы получите ActionFilter, значения формы уже были скопированы / установлены в / в ValueProvider. Я полагаю, что это то, где значения извлекаются для привязки.

Таким образом, возникает вопрос, как лучше всего применить некоторую фильтрацию к значениям формы, прежде чем они будут связаны. Я все еще хочу, чтобы связывание произошло. Я просто хочу отредактировать значения, которые он использует для привязки.

Ответы [ 2 ]

0 голосов
/ 02 августа 2009

Я закончил тем, что расширил метод SetProperty в DefaultModelBinder, чтобы проверить значение, прежде чем продолжить базовое поведение. Если значение является строкой, я выполняю фильтрацию.

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 голосов
/ 30 июля 2009

Создать пользовательский фильтр и переопределить OnActionExecuting():

public class CustomActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
    }
}

Или просто переопределить OnActionExecuting() в вашем контроллере

ОБНОВЛЕНИЕ:

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)
{
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...