Ninject在ASP.NET MVC中的自定义验证属性中不起作用

Wai Yan Hein

这个问题的后果这一问题

我正在开发一个ASP.NET MVC Web应用程序。在我的项目中,我正在使用对视图模型类的数据注释进行远程验证。我知道默认的远程属性不支持服务器验证。我可以在动作方法中再次验证它。但是我不想这样做,因为这违反了关注点分离。

因此,我尝试创建自定义服务器客户端远程验证属性。我在网上找到了一个代码,并使用了它。但这在发生服务器验证时给我错误。我正在使用Ninject进行依赖项注入。发生错误是因为Ninject无法将验证属性中的依赖项注入。

这是我的自定义远程验证属性:

public class RemoteClientServerAttribute : RemoteAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            // Get the controller using reflection
            Type controller = Assembly.GetExecutingAssembly().GetTypes()
                .FirstOrDefault(type => type.Name.ToLower() == string.Format("{0}Controller",
                    this.RouteData["controller"].ToString()).ToLower());
            if (controller != null)
            {
                // Get the action method that has validation logic
                MethodInfo action = controller.GetMethods()
                    .FirstOrDefault(method => method.Name.ToLower() ==
                        this.RouteData["action"].ToString().ToLower());
                if (action != null)
                {
                    // Create an instance of the controller class
                    object instance = Activator.CreateInstance(controller);
                    // Invoke the action method that has validation logic
                    object response = action.Invoke(instance, new object[] { value });
                    if (response is JsonResult)
                    {
                        object jsonData = ((JsonResult)response).Data;
                        if (jsonData is bool)
                        {
                            return (bool)jsonData ? ValidationResult.Success :
                                new ValidationResult(this.ErrorMessage);
                        }
                    }
                }
            }

            return ValidationResult.Success;
            // If you want the validation to fail, create an instance of ValidationResult
            // return new ValidationResult(base.ErrorMessageString);
        }

        public RemoteClientServerAttribute(string routeName)
            : base(routeName)
        {
        }

        public RemoteClientServerAttribute(string action, string controller)
            : base(action, controller)
        {
        }

        public RemoteClientServerAttribute(string action, string controller,
            string areaName)
            : base(action, controller, areaName)
        {
        }
    }

这是我的控制器课

public class CategoryController : Controller
    {
        private ICategoryRepo categoryRepo;

        public CategoryController()
        {

        }

        public CategoryController(ICategoryRepo categoryParam)
        {
            this.categoryRepo = categoryParam;
        }
        .
        .
        //remote validation action
         public JsonResult IsNameUnique(string Name)
        {
            IEnumerable<Category> categories = categoryRepo.Categories.Where(x => x.Name.Trim() == Name);

            Category category = categories.FirstOrDefault();
            return Json(category==null, JsonRequestBehavior.AllowGet);
        }
}

当验证通过客户端并到达服务器端时,它将开始引发错误。

这是错误

在此处输入图片说明

是的,它不会抛出方法未找到异常,因为它无法找到没有参数的构造函数。

我像这样添加了无参数构造函数

public CategoryController()
        {
           categoryRepo = new CategoryRepo(); 
        }

但是问题是如果我这样做,我使用Ninject的原因根本没有任何意义。它正在产生依赖性。但是,如果我不这样做,categoryRepo将在IsNameUnique操作中引发null异常。那么如何使Ninject在我的自定义远程验证属性中起作用?

bl

尝试更换:

object instance = Activator.CreateInstance(controller);

object instance = DependencyResolver.Current.GetService(controller);

我必须指出,这是有争议的ServiceLocator模式的用法但是我几乎看不到该属性如何做不同的事情。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Ninject在ASP.NET MVC中的自定义验证属性中不起作用

来自分类Dev

ASP .NET自定义控件验证在Firefox或Chrome中不起作用?

来自分类Dev

ASP.NET MVC - 自定义身份验证不起作用

来自分类Dev

Area的控制器操作中的自定义路由在ASP.NET MVC中不起作用

来自分类Dev

自定义验证属性中的客户端验证-ASP.NET MVC 4

来自分类Dev

自定义AuthenticationHandler在Asp.Net Core 3中不起作用

来自分类Dev

自定义授权筛选器在ASP.NET Core 3中不起作用

来自分类Dev

注释验证在ASP .NET MVC中不起作用

来自分类Dev

自定义属性以验证邮件在asp.net mvc中是否唯一

来自分类Dev

必需属性在ASP.NET MVC中不起作用

来自分类Dev

必需属性在ASP.NET MVC中不起作用

来自分类Dev

ASP.Net MVC 5 + SignalR + Ninject

来自分类Dev

asp.net MVC 4 Ninject OnApplicationStarted()

来自分类Dev

ASP.NET MVC自定义角色提供程序不起作用

来自分类Dev

ASP.NET必填字段验证器和自定义验证器不起作用

来自分类Dev

ASP.Net MVC中的Ninject Singleton绑定

来自分类Dev

WebAPI自定义ExceptionFilterAttribute中的Ninject属性注入不起作用

来自分类Dev

WebAPI自定义ExceptionFilterAttribute中的Ninject属性注入不起作用

来自分类Dev

ASP.NET MVC中的必需和范围验证不起作用

来自分类Dev

在Asp.net MVC中,如何动态传递自定义属性中的参数

来自分类Dev

加载Ninject组件ICache时ASP.NET MVC错误

来自分类Dev

必需的字段验证在asp.net中不起作用

来自分类Dev

如何在ASP NET MVC中自定义不干扰验证的JQuery消息?

来自分类Dev

用ASP.NET MVC中的自定义选项代替默认的客户端验证

来自分类Dev

ASP.NET MVC 4中的自定义验证摘要

来自分类Dev

在Asp.Net MVC中验证自定义用户类

来自分类Dev

如何通过asp.net mvc中的自定义jQuery验证复选框列表

来自分类Dev

使用Ninject的ASP.NET WebAPI ActionFilter的依赖注入不起作用

来自分类Dev

在Route属性ASP.NET MVC的URL中添加自定义单词

Related 相关文章

  1. 1

    Ninject在ASP.NET MVC中的自定义验证属性中不起作用

  2. 2

    ASP .NET自定义控件验证在Firefox或Chrome中不起作用?

  3. 3

    ASP.NET MVC - 自定义身份验证不起作用

  4. 4

    Area的控制器操作中的自定义路由在ASP.NET MVC中不起作用

  5. 5

    自定义验证属性中的客户端验证-ASP.NET MVC 4

  6. 6

    自定义AuthenticationHandler在Asp.Net Core 3中不起作用

  7. 7

    自定义授权筛选器在ASP.NET Core 3中不起作用

  8. 8

    注释验证在ASP .NET MVC中不起作用

  9. 9

    自定义属性以验证邮件在asp.net mvc中是否唯一

  10. 10

    必需属性在ASP.NET MVC中不起作用

  11. 11

    必需属性在ASP.NET MVC中不起作用

  12. 12

    ASP.Net MVC 5 + SignalR + Ninject

  13. 13

    asp.net MVC 4 Ninject OnApplicationStarted()

  14. 14

    ASP.NET MVC自定义角色提供程序不起作用

  15. 15

    ASP.NET必填字段验证器和自定义验证器不起作用

  16. 16

    ASP.Net MVC中的Ninject Singleton绑定

  17. 17

    WebAPI自定义ExceptionFilterAttribute中的Ninject属性注入不起作用

  18. 18

    WebAPI自定义ExceptionFilterAttribute中的Ninject属性注入不起作用

  19. 19

    ASP.NET MVC中的必需和范围验证不起作用

  20. 20

    在Asp.net MVC中,如何动态传递自定义属性中的参数

  21. 21

    加载Ninject组件ICache时ASP.NET MVC错误

  22. 22

    必需的字段验证在asp.net中不起作用

  23. 23

    如何在ASP NET MVC中自定义不干扰验证的JQuery消息?

  24. 24

    用ASP.NET MVC中的自定义选项代替默认的客户端验证

  25. 25

    ASP.NET MVC 4中的自定义验证摘要

  26. 26

    在Asp.Net MVC中验证自定义用户类

  27. 27

    如何通过asp.net mvc中的自定义jQuery验证复选框列表

  28. 28

    使用Ninject的ASP.NET WebAPI ActionFilter的依赖注入不起作用

  29. 29

    在Route属性ASP.NET MVC的URL中添加自定义单词

热门标签

归档