У меня была проблема, и она была решена по приведенной ниже ссылке:
Но у меня есть другой вопрос. Когда я добавил еще один такой маршрут:
routes.MapRoute( name: "Password", url: "{controller}/{action}/{passwordResetCode}", defaults: new { controller = "Authentication", action = "ResetPassword" } );
Предыдущий маршрут не работает. Я имею в виду, что он снова получает нулевое значение. Всякий раз, когда я хочу вызвать его метод, я вручную помещаю его маршрут в начало других маршрутов! И это заставляет работать! Вы знаете, что мне нужно изменить приоритет каждого маршрута, когда я хочу вызвать его метод. О.О. Есть идеи? Заранее спасибо.
Это полный файл rout.config в моем проекте.
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Password",
url: "{controller}/{action}/{passwordResetCode}",
defaults: new { controller = "Authentication", action = "ResetPassword" }
);
routes.MapRoute(
name: "Activation",
url: "{controller}/{action}/{activationCode}",
defaults: new { controller = "Authentication", action = "VerifyAccount" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
И это ActionMethods:
[HttpGet]
public ActionResult ResetPassword(string passwordResetCode)
{
ResetPasswordViewModel resetPasswordViewModel = new ResetPasswordViewModel();
ResponseMessage<User> passwordResetRequestedUser = _userService.ResetPasswordCode(passwordResetCode);
if (passwordResetRequestedUser.IsSuccess )
resetPasswordViewModel.ResetCode = passwordResetCode;
return View(resetPasswordViewModel);
}
[HttpGet]
public ActionResult VerifyAccount(string activationCode)
{
if (activationCode != null)
{
ResponseMessage<User> verifiedUser = _userService.VerifyAccount(activationCode);
ModelState.AddModelError("AccountVerification", verifiedUser.ErrorMessages[0]);
return View(verifiedUser.Result.ConvertToUserViewModel());
}
return new HttpNotFoundResult();
}
привет @StephenMuecke. Спасибо за внимание. Это было не так. все работало правильно. После того, как я получил результат из предыдущего вопроса, мне нужно было добавить другой маршрут. Конечно. Я собираюсь редактировать свой вопрос.
Это неверно! (см. мой ответ на другой ваш вопрос). И ваш вопрос должен включать код, а не его изображения.
Хорошо, @StephenMuecke, я сделаю то, что вы предложили.





Я предлагаю вам точно указать контроллер и действие, которые вы собираетесь использовать на настраиваемых маршрутах, чтобы не переопределять маршрут по умолчанию.
Бывший.
routes.MapRoute(
name: "Activation",
url: "Authentication/VerifyTheAccount/{activationCode}",
defaults: new { controller = "Authentication", action = "VerifyTheAccount", activationCode = UrlParameter.Optional }
);
routes.MapRoute(
name: "PasswordReset",
url: "Authentication/ResetPassword/{passwordResetCode}",
defaults: new { controller = "Authentication", action = "ResetPassword", passwordResetCode = = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
Подскажите, пожалуйста, как правильно это сделать?
Посмотрите мой ответ, и вы можете поместить его в свой файл route.config. Первые 2 маршрута предназначены специально для URL-адресов проверки и сброса пароля. Вы должны указать контроллер и действие в URL-адресе. Ваши маршруты прямо сейчас всегда используют первый зарегистрированный маршрут, потому что установленный вами URL-адрес принимает любой контроллер и действие, которое соответствует стандартному формату контроллера / действия / параметра, но, поскольку вы указали другое имя параметра, URL-адреса, которые ожидают параметр, и не Если указанное имя параметра становится равным нулю.
Понятно. Спасибо :)
Какой еще маршрут? (вам нужно включить это в свой вопрос). И показанный вами маршрут также соответствует маршруту по умолчанию (и почему вы приняли неправильный ответ в другом вопросе?)