c# - 在 asp.net core 2.2 中使用远程验证的问题
问题描述
我正在尝试使用控制器上或控制器中PhoneNumber
的远程属性检查身份的唯一性,但似乎无法正常工作并且触发DTO
Model
Api
sqlException
我在 Api 文件夹中,但我尝试在默认控制器文件夹中AuthController
单独使用ValidatorController
我使用了 Microsoft 文档中建议的 Remote 属性约定
// My Dto
namespace Imah.Api.API.Dto.Requests
{
public class PasswordlessLoginRequest
{
public User User { get; set; }
[Required(ErrorMessage = "the phone number is empty")]
[Remote(action: "IsPhoneNumberExist", controller: "Auth")]
public string PhoneNumber { get; set; }
}
}
// User Model
public class User : IdentityUser<int>, ITrackable
{
[Remote(action: "IsPhoneNumberExist", controller: "Auth")]
public override string PhoneNumber { get; set; }
}
// AuthController
[AllowAnonymous]
public class AuthController : ApiControllerBase
{
public AuthController(AuthService authService, SignInManager<User> signInManager,
IConfiguration config, UserManager<User> userManager,
IMapper mapper, INotificationService notifyService, IUserRepository repo)
{
}
[HttpPost("register")]
public async Task<IActionResult> Register(
PasswordlessLoginRequest userForRegisterDto)
{
var user = new User { PhoneNumber = userForRegisterDto.PhoneNumber };
RegisterParams registerParams = new RegisterParams
{
User = user,
};
var code = await _authService.Register(registerParams);
var userToReutrn = _mapper.Map<UserForListDto>(user);
if (code != null)
{
// Send authCode to user
_notifyService.Notify(user, code);
return Ok(userToReutrn);
}
return BadRequest("Error");
}
public IActionResult IsPhoneNumberExist([Bind(Prefix = "User.PhoneNumber")]string PhoneNumber)
{
return Json(data: $"A user phone number {PhoneNumber} already exists.");
//var user = _repo.GetUserByPhone(PhoneNumber).Result;
//if (user != null)
//{
// return Json(data: $"A user phone number {PhoneNumber} already exists.");
//}
//else
//{
// return Json(data: true);
//}
}
}
解决方案
这不是远程验证的问题。问题是你没有完全理解远程验证是什么,或者做什么。
远程验证是一种客户端验证技术,它调用服务器上的操作方法来执行验证。
远程验证的一个常见示例是检查用户名在用户提交数据时必须唯一的应用程序中是否可用,并执行客户端验证。
当用户填写一个Remote
属性在视图中具有该属性的模型时,远程验证在后台执行。用户不必单击提交按钮,然后等待呈现新视图并返回可能的错误消息,说明输入的用户名已被使用。相反,它向服务器发出一个轻量级的 Ajax 请求,以验证是否使用了用户名,然后返回一个真/假值,客户端 jQuery 验证器将使用该值向用户显示他们输入了重复的用户名。
推荐阅读
- cors - WSO2 EI 在从 Angular 客户端请求时给出预检请求 CORS 错误
- javascript - 如何为使用方括号的 Google AMP 的 JSX 属性编写类型声明?
- php - 使用 PHP mail() 没有收到任何电子邮件。?
- python - 覆盖 [] 以构建 Python 列表
- android - 如何在 Coordinator Layout 中将 bottomNavigationView 固定到底部?
- c++ - 如何在提升日期时间中创建日期范围?
- c++ - 尝试将 std::mutex 和 std::thread 与 OpenSSL 一起使用
- javascript - 切换 div 和扩展/压缩其他
- pip - 找不到命令:tensorflowjs_converter
- c# - 由于外键问题,无法插入新记录