用jsp做网站登录界面模板,软件公司网站模板图片,东营做网站公司,网站图表怎么做的本文讨论ASP.NET Core 2.1中与ASP.NET Core MVC / Web API控制器中的模型绑定相关的功能。虽说这是一个功能#xff0c;但从我的角度来看#xff0c;它更像是一个错误修复#xff01;请注意#xff0c;我使用的是 NET Core 2.1 Preview 1#xff0c;正式版发布后#xff… 本文讨论ASP.NET Core 2.1中与ASP.NET Core MVC / Web API控制器中的模型绑定相关的功能。虽说这是一个功能但从我的角度来看它更像是一个错误修复请注意我使用的是 NET Core 2.1 Preview 1正式版发布后功能可能存在变动。ASP.NET Core 2.0 模型验证模型验证是ASP.NET Core MVC 管线的重要组成部分。有很多方法可以注入到验证层例如使用FluentValidation最常见的方法可能是使用来自System.ComponentModel的验证标记来修饰绑定模型。 例如public class UserModel {[Required, EmailAddress] public string Email { get; set; }[Required, StringLength(1000)] public string Name { get; set; }
}如果您在控制器的操作方法中使用UserModelMvcMiddleware则会自动创建对象的新实例绑定模型的属性并使用如下三个来源对其进行验证表单 - 当使用POST将表单发送到服务器时发送到HTTP请求的主体中路由 - 在匹配路由后从URL段或默认值中获取查询字符串 - 在URL的末尾传递。请注意目前作为JSON发送的数据默认情况下不会被绑定。如果您希望绑定请求体中的JSON数据则需要使用此处所述的[FromBody]标记修饰模型。在控制器Action方法中可以简单地检查ModelState属性确定提供的数据是否有效public class CheckoutController : Controller { public IActionResult SaveUser(UserModel model) { if(!ModelState.IsValid){ // Something wasnt valid on the modelreturn View(model);} // The model passed validation, do something with it}
}这是非常标准的MVC内容但是如果您不想创建整个绑定模型但仍想验证传入数据该怎么办ASP.NET Core 2.0 顶级参数DataAnnotation标记默认MVC验证系统使用的属性不必应用于类的属性它们也可以应用于参数。这可能会导致您认为您可以完全替换UserModel上面的示例中的以下内容MVC默认验证系统使用的DataAnnotation标记不一定应用于类的属性它们同样可以应用于参数。这可能会导致您认为可以完全替换上面示例中的UserModel如下所示:public class CheckoutController : Controller { public IActionResult SaveUser([Required, EmailAddress] string Email [Required, StringLength(1000)] string Name) { if(!ModelState.IsValid){ // Something wasnt valid on the modelreturn View(model);} // The model passed validation, do something with it}
}不幸的是这是行不通的在绑定属性时验证属性将被忽略并且ModelState.IsValid始终是trueASP.NET Core 2.1中的顶级参数幸运的是ASP.NET Core团队意识到了这个问题并且已经将修补程序合并为ASP.NET Core 2.1的一部分。因此上一节中的代码的行为与您所期望的一样参数经过验证并相应地进行了ModelState.IsValid更新。作为这项工作的一部分您现在还可以使用[BindRequired]标记修饰参数。当绑定非空值类型时此标记很重要因为使用[Required]标记对这些属性并不能提供预期的行为。这意味着您现在可以执行以下操作并确保testId参数已从路由参数中正确绑定并且qty参数已从查询字符串中绑定。在ASP.NET Core 2.1之前它甚至不能编译[HttpGet(test/{testId})]public IActionResult Get([BindRequired, FromRoute] Guid testId, [BindRequired, FromQuery] int qty) { if(!ModelState.IsValid){ return BadRequest(ModelState);} // Valid and bound}对于这个问题可以查阅我之前的博客《ASP.NET Core MVC中的 [Required]与[BindRequired]》。总结在ASP.NET Core 2.0及以下版本中应用于顶级参数的验证标记将被忽略并且ModelState不会更新。只考虑复杂模型类型的验证参数。在ASP.NET Core 2.1中验证标记现在将在顶级参数上得到遵守。更重要的是您可以将[BindReqired]标记应用于参数。ASP.NET Core 2.1 增加了很多新特性。这是一些不错的小改进之一它使事情变得更容易更一致 -- 我喜欢这种改变。翻译自https://andrewlock.net/coming-in-asp-net-core-2-1-top-level-mvc-parameter-validation/。原文地址https://www.cnblogs.com/tdfblog/p/asp-net-core-2-1-top-level-mvc-parameter-validation.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com