URL действие нулевой объект asp.net mvc

Мне нужно создать глобальный URL-адрес и отправить по электронной почте. Я создаю глобальный URL-адрес благодаря url.action, но url.action возвращает Me null. И я не знаю почему. Кто-нибудь знает? У меня есть метод:

public string sendRecoveryMessage(Users userModel)
    {
        MessageModel message = new MessageModel();

        string resetLink = "<a href='"
                   + Url.Action("SetNewPassword", "Home", new { TimeLink = userModel.TimeLink }, "http")
                   + "'>Ссылка для восстановления пароля</a>";

        message.emailTo = userModel.Email;
        message.emailFrom = "Narkom@info.by";
        message.title = "Восстановление пароля";
        message.message = resetLink;

        string responseToString = SendMessage(message);

        try
        {
            RootObject r = JsonConvert.DeserializeObject<RootObject>(responseToString);
            return r.msg + "Для продолжения изменения пароля пройдите по ссылке указаной в письме. У вас есть сутки на изменение вашего пароля!";
        }
        catch (Exception)
        {
            return responseToString;
        }
    }

И маршрут:

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

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

И метод восстановления пароля:

public ActionResult SetNewPassword(string TimeLink)
    {
        var recEmailDetails = dbModel.Users.Where(x => x.TimeLink == TimeLink).FirstOrDefault();

        if (recEmailDetails == null)
        {
            ViewBag.RedirectMessage = "Данная ссылка больше не активна!";
            return View("~/Views/Home/RedirectPage.cshtml");
        }

        DateTime dateNow = Convert.ToDateTime(DateTime.Now);
        DateTime dateConfirm = Convert.ToDateTime(recEmailDetails.DateTime);

        TimeSpan diff = dateConfirm - dateNow;

        var TotalSeconds = Math.Floor(diff.TotalSeconds);

        TotalSeconds += 86400;

        if (TotalSeconds < 0)
        {
            ViewBag.RedirectMessage = "Время действия ссылки истекло. Нам очень жаль :C";
            return View("~/Views/Home/RedirectPage.cshtml");
        }
        else
        {
            Session["idResetUser"] = recEmailDetails.Id;

            ChangePasswordModel CPM = new ChangePasswordModel();

            try
            {
                recEmailDetails.DateTime = null;
                recEmailDetails.TimeLink = null;

                dbModel.SaveChanges();
                ModelState.Clear();
            }
            catch (DbEntityValidationException exc)
            {
                foreach (var entityValidationErrors in exc.EntityValidationErrors)
                {
                    foreach (var validationError in entityValidationErrors.ValidationErrors)
                    {
                        ViewBag.RedirectMessage = exc.Message;
                    }
                }
            }

            return View("~/Views/Home/SetNewPassword.cshtml", CPM);
        }
    }

2 ответа

Попробуй вот так -

string resetLink = "<a href='" + Url.Action("SetNewPassword", "Home", new System.Web.Routing.RouteValueDictionary(new { TimeLink = userModel.TimeLink }), "http", , Request.Url.Host) + "'>Ссылка для восстановления пароля</a>";

Url.Action будет отображаться относительно сервера, а не клиента, читающего электронную почту. Под глобальным URL вы подразумеваете абсолютный URL, который вы можете просто определить корневой URL вручную, например:

"http://somewhere.com" + Url.Action(...)

Который я думаю, должен сделать правильный URL; Предварительный просмотр, чтобы быть уверенным. Если ваше приложение представляет собой виртуальный каталог в корневом каталоге, добавьте его в корневой URL-адрес. Также я вижу вызов SendMessage; удостоверьтесь, что ничто там не заставляет сообщение не отображаться правильно (так как это, кажется, ваша пользовательская реализация?)

Другие вопросы по тегам