문제

action 메소드가 매개 변수에 바인딩하기 전에 요청을 편집하는 방법이 있습니까? 이미 Request.Form의 편집을 활성화하기 위해 반사 호출이 있습니다. 바인딩이 발생하기 전에 변경할 수있는 Extensibilty의 점을 찾을 수 없습니다.

업데이트 : 요청을 편집하고있는 것처럼 보입니다. 바운드 매개 변수를 보면서 확인했습니다. action 필터에 도달 할 때까지 B/C가 잘못되었습니다. 양식 값은 이미 ValueProvider에 복사/설정되었습니다. 나는 값이 바인딩을 위해 당기는 곳이라고 생각합니다.

따라서 문제는 일부 필터링이 묶기 전에 양식 값에 적용하는 가장 좋은 방법이됩니다. 나는 여전히 바인딩이 발생하기를 원합니다. 바인딩에 사용하는 값을 편집하고 싶습니다.

도움이 되었습니까?

해결책 2

기본 동작을 진행하기 전에 값을 확인하기 위해 DefaultModelBinder의 SetProperty 메소드를 확장했습니다. 값이 문자열 인 경우 필터링을 수행합니다.

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);
    }
}

다른 팁

사용자 정의 필터를 작성하고 재정의하십시오 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)
{
    ...
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top