Маршрут не нашел контроллер

#c# #html #asp.net #asp.net-mvc #asp.net-web-api

#c# #HTML #asp.net #asp.net-mvc #asp.net-web-api

Вопрос:

У меня есть следующий код в контроллере WebAPI:

     [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)))
            {
                // Don't reveal that the user does not exist or is not confirmed
                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);
                string callbackUrl = Url.Link("Default",
                    new { controller = "User/ManageAccount/reset-password", userId = user.Id, code = code }); //From UserController
                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();
            }

        }

        return BadRequest();
    }
 

Вот код UserController:

 public class UserController : Controller
{

    public ActionResult ManageAccount(string id)
    {
        if (!string.IsNullOrEmpty(id))
        {
            string page = "~/html/"   id   ".html";
            return new FilePathResult(page, "text/html");
        }
        return new FilePathResult("~/html/login.html", "text/html");
    }
}
 

Сгенерированная ссылка выглядит следующим образом:
«http://localhost:7524/User/ManageAccount/reset-password?userId=4amp;code=ibrDwvzMjDerBPjRYFcKnATi6GpgIEGC1ytT6c/lsk4BF9ykxZWx8McBvxxBf/82csUGaCxpvgqY2eWUvirAxGJqP4I+9YHrVRpWmJN2u74xUP++qAkfRf6d5gTz9kXVdWJQga2R1dpTy7tQC3OUWQ==»

Когда я нажимаю, он становится таким: https://localhost/User/ManageAccount/reset-password?userId=4amp;code=ibrDwvzMjDerBPjRYFcKnATi6GpgIEGC1ytT6c/lsk4BF9ykxZWx8McBvxxBf/82csUGaCxpvgqY2eWUvirAxGJqP4I+9YHrVRpWmJN2u74xUP++qAkfRf6d5gTz9kXVdWJQga2R1dpTy7tQC3OUWQ==

Кажется, что маршрут не видел UserController!!

Вот маршрут:

  public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
 

Вот маршрут WebAPI:

     public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        // Configure Web API to use only bearer token authentication.
        config.SuppressDefaultHostAuthentication();

        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 }
        );


    }
 

Я не знаю, что я делаю не так?

Ответ №1:

Я хочу спросить вас больше о процессе нажатия на сгенерированную ссылку из WebAPI. И когда вы получаете доступ ко второму URL-адресу, какой результат отображается в браузере? Страница ошибки с веб-сервера Asp или страницы ошибок браузера?

Я предполагаю, что ошибка, о которой вы хотите упомянуть, вызвана тем фактом, что вы проигнорировали порт сервера в URL, из-за чего браузер не может найти ваш сайт. Обратите внимание, что отладка в IIS Express предоставит вам случайный порт веб-сервера, если вы хотите, чтобы этот порт был исправлен, поскольку значение http по умолчанию равно 80, разверните его с помощью IIS.

Чтобы упростить понимание, сохраните http://localhost:7524/ вместо изменения на http://localhost/ . Я думаю, что все будет работать правильно!!