通过与客户端 (MVC) 一起使用 Web API 中的操作来验证电子邮件是不是存在于数据库中并进行远程验证?

Posted

技术标签:

【中文标题】通过与客户端 (MVC) 一起使用 Web API 中的操作来验证电子邮件是不是存在于数据库中并进行远程验证?【英文标题】:Verify if email exists in database with remote validation by consuming with the client (MVC) the action in the web API?通过与客户端 (MVC) 一起使用 Web API 中的操作来验证电子邮件是否存在于数据库中并进行远程验证? 【发布时间】:2018-07-20 18:29:42 【问题描述】:

我有一个 Web API (ASP.net),我想要 2 个客户端(Xamarin 和 ASP.net MVC)。

我的 Web API 有效,我使用 Postman 对其进行了测试。我尝试通过使用 WebAPI 使用 Web 客户端添加新用户,并且它可以工作。但是现在我想在用户在表单中输入他的电子邮件时检查数据库中是否已经存在电子邮件。

我看到可以使用RemoteAttribute 来执行此操作,但此解决方案对我不起作用。

如果电子邮件存在,我可以检查 API。

    [AllowAnonymous]
    [HttpGet]
    public async Task<JsonResult<bool>> VerifyEmailAsync(string email)
    
        var user = await UserManager.FindByEmailAsync(email);

        if (user == null)
        
            return Json(false);
        
        else
        
            return Json(true);
        
    

我可以检索真假,但我不知道如何在我的 MVC 客户端中使用它。

我希望你能理解我的问题。

【问题讨论】:

避免重复邮件的第一个地方是存储内容的数据库。该列应标记为“唯一”。其余的只是对拒绝 INSERT 命令的数据库做出反应。您的应用程序中的任何检查都容易遇到竞争条件,尤其是对于具有多个客户端的 Web 应用程序。 您可能会发现此资源很有用tutlane.com/tutorial/aspnet-mvc/… [Remote] 遇到了什么问题? 我在客户端 viewModel 中使用了 [Remote],但我想在我的 API 中访问该操作。所以它没有工作。 【参考方案1】:

如果您从 VerifyEmailAsync 方法返回布尔值 (true/false),这是不可能的。如果您将结果更改为Task&lt;JsonResult&gt;,则远程属性将起作用

所以我推荐什么;你可以像这样返回http响应码;HTTP response code for POST when resource already exists

所以你会更接近web api standards。但是如果你有很多这样的业务消息,你可以考虑json-envelope的方法。

【讨论】:

谢谢你的回答,正是我需要的!

以上是关于通过与客户端 (MVC) 一起使用 Web API 中的操作来验证电子邮件是不是存在于数据库中并进行远程验证?的主要内容,如果未能解决你的问题,请参考以下文章

我们应该将 CancellationToken 与 MVC/Web API 控制器一起使用吗?

是否可以将自定义错误页面与 MVC 站点一起使用,但不能在 Web API 中使用?

.NET Core Web API理解

MVC .NET cookie 身份验证系统通过令牌身份验证访问 Web Api

Asp.net MVC 与 Asp.net Web API 区别

无法让 ASP.NET Core Web API 与 IIS 一起使用 [关闭]