c# - 如何在帖子上验证财产
问题描述
我有一个 asp .net mvc 应用程序。对于我的所有其他属性,我使用数据注释来验证属性。但我想要一个自定义验证。我正在网上阅读自定义数据注释验证可能是采用的方法。
按照此处的链接ASP.NET MVC: Custom Validation by DataAnnotation它看起来是一个很好的解决方案。我遇到的唯一问题是如果我的 DBContext 不在控制器中,我该如何访问它。
到目前为止我所拥有的
这是我在控制器中用于获取当前用户和数据库上下文的典型代码。
控制器代码
private ApplicationDbContext _dbContext => HttpContext.GetOwinContext().Get<ApplicationDbContext>();
private ApplicationUserManager _userManager;
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
视图模型
[HasNoRedemption]
public string code {get; set;}
HasNoRedemption.cs
public class HasNoRedemption : ValidationAttribute
{
public override bool IsValid(object value)
{
//check if user has ever claimed the code, return true is good
}
}
如果我可以在进行自定义验证方面获得一些帮助,以便我能够检查数据库或提出更好方法的建议。
解决方案
1)我不建议使用数据注释属性来实现你的业务逻辑。验证属性应该包含纯函数。验证属性背后的目的是缩小被认为是正确的输入数据的范围。不执行您的应用程序的业务规则
2)如果你真的想做你想做的事(出于好奇),请查看以下说明:https ://andrewlock.net/injecting-services-into-validationattributes-in-asp-net-core/
public class CustomValidationAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(
object value, ValidationContext validationContext)
{
// validationContext.GetService() ...
}
}
推荐阅读
- javascript - 为什么 Swup.js 不处理相对链接?
- apache-nifi - apache Nifi:updateAttribute 处理器
- python - 如何访问第 n 个嵌套列表,我是否知道嵌套列表的深度?
- python - 在 AWS Lambda 上,Openpyxl 不跟踪图像
- javascript - 无法从捆绑的数据库中读取
- angular - 错误:multi (webpack)-dev-server/client?http://0.0.0.0:0&sockPath=/sockjs-node ./node_modules/@angular/material/prebuilt-themes/indigo-pink.css
- image - 从具有复杂图形的图像中提取几何图案
- python - 如何使用 python 在 Salesforce 中创建案例
- python - 连接 Excel 和 CSV 文件
- mongodb - Mongodb聚合组按内部数组