【问题标题】:Using remote validation with ASP.NET Core通过 ASP.NET Core 使用远程验证
【发布时间】:2022-05-02 13:53:00
【问题描述】:

我正在尝试按如下方式创建远程验证:

[Remote("CheckValue", "Validate", ErrorMessage="Value is not valid")]
public string Value { get; set; }

我正在使用 ASP.NET Core (ASP.NET 5),但似乎 Remote 不可用。 有谁知道如何使用 ASP.NET CORE 做到这一点?

【问题讨论】:

    标签: c# asp.net-core asp.net-core-mvc


    【解决方案1】:

    RemoteAttribute 是 ASP.Net MVC Core 的一部分:

    • 如果您使用的是 RC1,它位于 Microsoft.AspNet.Mvc 命名空间中。请参阅 github 中的 RemoteAttribute
    • 在 RC2 中计划重命名后,它将位于 Microsoft.AspNetCore.Mvc 命名空间中。请参阅 github 中的 RemoteAttribute

    例如,在 RC1 中创建一个带有身份验证的新 MVC 站点。然后使用调用家庭控制器中的方法的虚拟远程验证更新生成的LoginViewModel

    using Microsoft.AspNet.Mvc;
    using System.ComponentModel.DataAnnotations;
    public class LoginViewModel
    {
        [Required]
        [EmailAddress]
        [Remote("Foo", "Home", ErrorMessage = "Remote validation is working")]
        public string Email { get; set; }
    
        ...
    }
    

    如果您在主控制器中创建该虚拟方法并设置断点,您将看到每当您更改登录表单中的电子邮件时,它就会被命中:

    public class HomeController : Controller
    {
    
        ...
    
        public bool Foo()
        {
            return false;
        }
    }
    

    【讨论】:

    • 你是对的......我在看 System.Component.DataAnnotations,我什至在 Github 上找到了那个库源。当然是在 Microsoft.AspNet.Mvc 中。谢谢!
    • 链接已损坏
    【解决方案2】:

    在此期间,文档在那里并且可用here。简而言之,您只需要使用以下内容装饰您的视图模型的属性:

        [Remote(action: "Foo", controller: "Bar", ErrorMessage = "Remote validation is working")]
        [Required]        
        [Display(Name = "Name")]
        public string Name { get; set; }
    

    然后在控制器(在这个例子中命名为“Bar”)中创建一个动作(在这个例子中命名为“Foo”)并在那里添加你的逻辑:

      [AcceptVerbs("Get", "Post")]
      public async Task<IActionResult> Foo(string name)
      {
          bool exists = await this.Service.Exists(name);
          if (exists)
              return Json(data: false);
          else
              return Json(data: true);
      }
    

    最后说明:Remote 属性位于Microsoft.AspNetCore.Mvc 命名空间中。

    【讨论】: