asp.net MVC 的客户端验证“潜在危险的请求表单...”

client side validation for asp.net mvc “A potentially dangerous Request.Form…

本文关键字:危险 请求 表单 net MVC 客户端 验证 asp      更新时间:2023-09-26

我想知道如何在 asp.net mvc 中实现潜在危险的 request.form 的客户端验证。

在这种情况下,我不想设置[ValidateInput(false)],并且向用户显示此错误消息页面对用户不友好。类似于 [Required] 属性对客户端验证的作用。

我认为有一个内置功能,因为它对我来说似乎是一个常见问题,但似乎我找不到它。

可以通过

重写 DefaultModelBinder.BindModel 方法在模型绑定期间捕获HttpRequestValidationException

public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        try
        {
            return base.BindModel(controllerContext, bindingContext);
        }
        catch (HttpRequestValidationException)
        {
            bindingContext.ModelState.AddModelError(bindingContext.ModelName, "Illegal Html characters...");
            return null;
        }
    }

在控制器操作中,您现在可以检查模型是否无效,并根据需要重新显示视图。 jQuery不显眼的验证应该负责其余的工作。

    [HttpPost]
    public virtual ActionResult Edit(ViewModel model)
    {
        if (!ModelState.IsValid)
        {                               
            return View(model);
        }
    }

如果您还没有自定义DefaultModelBinder则必须确保在应用程序启动时注册它。

ModelBinders.Binders.DefaultBinder = new CustomDefaultModelBinder();