У меня есть поле электронной почты в форме asp.net mvc.Мне нужно проверить электронную почту с помощью удаленной проверки, позвонив на сервер net core api.Удаленная проверка активируется, когда поле электронной почты теряет фокус.Однако вызов api-сервера застопорился при асинхронном вызове метода api.
public class Model
{
[Required]
[StringLength(50, ErrorMessage = "The {0} exceeds {1} characters")]
[EmailAddress(ErrorMessage = "Invalid Email Address")] // NOTE: This attribute REQUIRES .Net 4.5 or higher!
[DataType(DataType.EmailAddress)]
[Display(Name = "Email", ResourceType = typeof(Resources.Resources))]
[Remote(action: "VerifyEmail", controller: "Account")]
public string Email { get; set; }
}
public class AccountController : Controller
{
CoreApiHelp _apiHelper = new ApiHelp();
public AccountController()
{
}
[AllowAnonymous]
[AcceptVerbs("Get", "Post")]
public ActionResult VerifyEmail(string email)
{
if (!_apiHelper.VerifyEmail(email).Result)
{
return Json($"Email {email} is already in use.");
}
return Json(true);
}
}
public class ApiHelp
{
HttpClient _client = new HttpClient();
SettingHelp _setting = new SettingHelp();
IdentityServer4Help _serverHelp;
const string IS_USER_EMAIL_UNIQUE = "User/IsEmailUnique?";
public CoreApiHelp()
{
_serverHelp = new IdentityServer4Help(_setting.IdentityServer4Host, _setting.IdentityServer4ClientId,
_setting.IdentityServer4ClientSecret, _setting.IdentityServer4ClientScope);
_client.BaseAddress = new Uri(_setting.ApiHost);
}
public async Task<bool> VerifyEmail(string email)
{
var token = await _serverHelp.GetToken();
_client.SetBearerToken(token);
string uri = $"{IS_USER_EMAIL_UNIQUE}userEmail={email}";
bool res = false;
using (var response = await _client.GetAsync(uri))
{
await response.EnsureSuccessStatusCodeAsync();
res = await response.Content.ReadAsAsync<bool>();
}
return res;
}
}
Код должен возвращать значение true или false после выполнения вызова API VerifyEmail.Однако выполнение остановилось в строке "await _serverHelp.GetToken ();"Если я вызываю «VerifyEmail» после нажатия кнопки «Отправить», вызов API работает нормально.Кажется, есть проблема с вызовом асинхронного метода для удаленной проверки.Методы в примерах для удаленной проверки - это вызовы синхронизации.