Недопустимый URI: формат URI не может быть определен.
Я тож Asp.Net и я осуществил сброс пароля, я отправить ссылку на адрес электронной почты пользователя, чтобы сбросить пароль.
Вот этот код:
[HttpPost] [Route("ForgotPassword")] [AllowAnonymous] public async Task<IHttpActionResult> ForgotPassword(ForgotPasswordViewModel model) { if (ModelState.IsValid) { var user = await UserManager.FindByEmailAsync(model.Email); if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id))) { return BadRequest("Either user does not exist or you have not confirmed your email."); } try { // Send an email with this link string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); Url.Link("DefaultApi", new { controller = "Account/ConfirmEmail", userId = user.Id, code = code }); string callbackUrl = Url.Link("DefaultApi", new { controller = "Account/ManageAccount/reset-password", userId = user.Id, code = code }); //string callbackUrl = Url.Link("Default", // new { controller = "User/ManageAccount/reset-password", userId = user.Id, code = code }); await UserManager.SendEmailAsync(user.Id, "Reset Password", "Please reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>"); return Ok(); } catch (Exception ex) { return InternalServerError(ex); } } return BadRequest(); } // GET api/Account/ManageAccount [AcceptVerbs("GET")] [AllowAnonymous] [Route("ManageAccount")] public IHttpActionResult ManageAccount(string id) { if (! String.IsNullOrEmpty(id)) { string page = id + ".html"; return Redirect(page); } return Redirect("Login.html"); } // POST: /Account/ResetPassword [HttpPost] [AllowAnonymous] [Route("ResetPassword")] public async Task<IHttpActionResult> ResetPassword(ResetPasswordViewModel model) { if (!ModelState.IsValid) { return BadRequest(ModelState); } var user = await UserManager.FindByEmailAsync(model.Email); if (user == null) { // return Redirect("https://localhost:44342/Login.html"); } var result = await UserManager.ResetPasswordAsync(user.Id, model.Code, model.Password); if (result.Succeeded) { return Ok(); } return InternalServerError(); }
Вот webApiConfig:
public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API configuration and services // Configure Web API to use only bearer token authentication. config.SuppressDefaultHostAuthentication(); config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/json")); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // Web API routes config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); var json = config.Formatters.JsonFormatter; json.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; config.Formatters.Remove(config.Formatters.XmlFormatter); } }
Что я уже пробовал:
В AccountController я попробовал это сделать, но это не работает:
[HttpGet] [AllowAnonymous] public async Task<IHttpActionResult> ManageAccount(string id) { if (! String.IsNullOrEmpty(id)) { string page = id + ".html"; return Redirect(page); } return Redirect("Login.html"); }
Также,
[AcceptVerbs("GET")] [AllowAnonymous] [Route("ManageAccount/{id}")] public async Task<IHttpActionResult> ManageAccount(string id) { if (! String.IsNullOrEmpty(id)) { string page = id + ".html"; return Redirect(page); } return Redirect("Login.html"); }
Вот ссылка, отправленная на электронную почту:(посмотрите на ее формат) !
http://localhost:7524/api/Account/ManageAccount/reset-password?userId=1011&code=vbGi%2FzN0oFjw6RLlFVuBHiyEz2rH%2FNaO7tc5Y7Y47vzKKC5aNgx9yzZLbHtMD1%2BVZYCot1dvRZSLupPUYcxpCW%2FIl4cJwAIxVjVYA1kxrIjobdrXVqHNMXJmTF5u6cc%2FJdA0uDlQzNjoG4%2Fcjfl3ToRxarZokxI3VN8TEvt1I2M%3D
Когда я нажимаю на него, я получаю:
Недопустимый URI: формат URI не может быть определен.
Что мне нужно, так это вызвать html-страницу "с url-адресом, который имеет идентификатор пользователя и аутентификацию кода" из WebApi
Я действительно застрял, не могли бы вы мне помочь?
ZurdoDev
Что ты пытаешься сделать?
Где ты застрял?
Member 12919448
Я пытаюсь сбросить пароль.
Я отправляю электронное письмо с идентификатором пользователя и кодом для сброса пароля
после того, как пользователь нажимает на эту ссылку, url-адрес имеет его идентификатор и код аутентификации, эта страница запрашивает у пользователя его новый пароль. То, что я нашел, не сработало для меня, оно показало мне, что путь не существует, а код, который я попробовал, показал мне ошибку HTTP 404.0 - не найден
Nirav Prabtani
Вы следовали шаблону маршрута (URL)?
Не могли бы вы упомянуть конечную точку, на которую вы нацелены ?