Создание URL-адреса в controllerе .NET MVC

Мне нужно иметь возможность создать ссылку в Action на controllerе для отправки электронной почты. Для чего лучше всего это делать? Я не хочу строить его сам, если мои маршруты изменятся.

Должен ли я иметь представление для каждого электронного письма и его визуализировать и отправлять? Это может быть хорошим способом сделать это.

Если вы просто хотите получить путь к определенному действию, используйте UrlHelper :

 UrlHelper u = new UrlHelper(this.ControllerContext.RequestContext); string url = u.Action("About", "Home", null); 

если вы хотите создать гиперссылку:

 string link = HtmlHelper.GenerateLink(this.ControllerContext.RequestContext, System.Web.Routing.RouteTable.Routes, "My link", "Root", "About", "Home", null, null); 

Intellisense даст вам значение каждого из параметров.


Обновление от комментариев : у controllerа уже есть UrlHelper :

 string url = this.Url.Action("About", "Home", null); 

Если вам нужен полный URL (например, для отправки по электронной почте), рассмотрите возможность использования одного из следующих встроенных методов:

С помощью этого вы исправите маршрут для использования для построения URL:

 Url.RouteUrl("OpinionByCompany", new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}), HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority) 

Здесь URL-адрес создается после того, как механизм маршрута определит правильный:

 Url.Action("Detail","Opinion",new RouteValueDictionary(new{cid=newop.CompanyID,oid=newop.ID}),HttpContext.Request.Url.Scheme, HttpContext.Request.Url.Authority) 

В обоих методах последние 2 параметра определяют протокол и имя хоста.

С уважением.

У меня была такая же проблема, и, похоже, ответ Гидона имеет один крошечный недостаток: он генерирует относительный URL-адрес, который нельзя отправить по почте.

Мое решение выглядит так:

 string link = HttpContext.Request.Url.Scheme + "://" + HttpContext.Request.Url.Authority + Url.Action("ResetPassword", "Account", new { key = randomString }); 

Таким образом, генерируется полный URL-адрес, и он работает, даже если приложение занимает несколько уровней на сервере хостинга и использует порт, отличный от 80.

EDIT: Я нашел это полезным также.

Другой способ создания абсолютного URL-адреса для действия:

 var relativeUrl = Url.Action("MyAction"); //..or one of the other .Action() overloads var currentUrl = Request.Url; var absoluteUrl = new System.Uri(currentUrl, relativeUrl); 

Я знаю, что это старый вопрос, но на всякий случай вы пытаетесь сделать то же самое в ASP.NET Core, вот как вы можете создать UrlHelper внутри действия:

 var urlHelper = new UrlHelper(this.ControllerContext); 

Или вы можете просто использовать свойство Controller.Url если вы наследуете Controller .

  • Как я могу указать порядок DataAnnotation ValidationAttribute?
  • Как я могу предоставить AntiForgeryToken при публикации данных JSON с использованием $ .ajax?
  • Как можно добиться динамических панировок с помощью ASP.net MVC?
  • ASP.NET MVC 4 + Ninject MVC 3 = Нет конструктора без параметров, определенного для этого объекта
  • Использует ViewBag в MVC плохо?
  • Отправьте данные JSON через POST (ajax) и получите ответ json от Controller (MVC)
  • Доступ к Azure Emulator с другого устройства
  • ASP.NET MVC - аутентифицировать пользователей в Active Directory, но требует ввода имени пользователя и пароля
  • Перенаправление URL-адреса IIS и маршрутизация URL-адресов
  • Преобразование сплющенных иерархических данных из SQL Server в структурированный объект JSON с C # / Linq
  • Поддельный DbContext для платформы Entity Framework 4.1 для тестирования
  • Давайте будем гением компьютера.