小编S W*_*aye的帖子

在ASP.Net Core 2 MVC中禁用模型验证的正确方法

使用扩展方法设置MVC

services.AddMvc()
Run Code Online (Sandbox Code Playgroud)

然后在控制器中,这也可能适用于GET,使用正文中提供的参数为POST操作创建一个方法,例如

[HttpPost("save")]
public Entity Save([FromBody]Entity someEntity)
Run Code Online (Sandbox Code Playgroud)

当调用该动作时,MVC管道将调用ParameterBinder,而ParameterBinder又调用DefaultObjectValidator.我不想要验证(一件事情很慢,但更重要的是循环复杂的循环图),但似乎关闭管道验证的唯一方法是这样的:

public class NonValidatingValidator : IObjectModelValidator
{
    public void Validate(ActionContext actionContext, ValidationStateDictionary validationState, string prefix, object model)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

并在StartUp/ConfigureServices中:

        var validator = services.FirstOrDefault(s => s.ServiceType == typeof(IObjectModelValidator));
        if (validator != null)
        {
            services.Remove(validator);
            services.Add(new ServiceDescriptor(typeof(IObjectModelValidator), _ => new NonValidatingValidator(), ServiceLifetime.Singleton));
        }
Run Code Online (Sandbox Code Playgroud)

这看起来像一把大锤.我环顾四周,找不到替代方案,也试图删除DataAnnotationModelValidator没有成功,所以想知道是否有更好/正确的方法来关闭验证?

c# validation asp.net-mvc asp.net-core-2.0

6
推荐指数
5
解决办法
4208
查看次数

标签 统计

asp.net-core-2.0 ×1

asp.net-mvc ×1

c# ×1

validation ×1