Как я могу быстро определить, какой корневой URL-адрес для моего приложения ASP.NET MVC? То есть, если IIS настроен для обслуживания моего приложения по адресу http://example.com/foo/bar , то я хотел бы иметь возможность получить этот URL надежным способом, не требующим получения текущего URL из запросить и нарезать его каким-нибудь хрупким способом, который сломается, если я перенаправлю свое действие.
Причина, по которой мне нужен базовый URL, заключается в том, что это веб-приложение вызывает другой, которому нужен корень для веб-приложения вызывающей стороны для целей обратного вызова.
.net
asp.net
asp.net-mvc
iis
Бенджамин Поллак
источник
источник
urlHelper.Content("~")
? Как мне создать определениеurlHelper
? Спасибо!var request = HttpContext.Current.Request; urlBase = string.Format("{0}://{1}{2}", request.Url.Scheme, request.Url.Authority, (new System.Web.Mvc.UrlHelper(request.RequestContext)).Content("~"));
ControllerContext.RequestContext.HttpContext.Request
@Url.Content("~")
разрешается в"/"
, который не является базовым URL.Так что ни один из перечисленных здесь не работал для меня, но, используя несколько ответов, я получил кое-что работающее:
Обновление для ASP.NET Core / MVC 6:
ASP.NET Core
делает этот процесс немного более болезненным, особенно если вы глубоко в своем коде. У вас есть 2 варианта, чтобы добраться доHttpContext
1) Передайте это от вашего
controller
:затем в
model
:2) Возможно, более чистый способ - внедрить его в ваш класс, который начинается с регистрации типов в вашем классе.
Startup:
тогда сделайте это для вас так:
в любом случае, вот обновление для
.NET Core
GetBaseUrl()
:источник
Helpers
в основе моего приложения, у меня естьstatic
класс,Statics
и я помещаю функции, подобные приведенным выше ... просто убедитесь, что вы изменили вышеприведенное сpublic string GetBaseUrl()
наpublic static string GetBaseUrl()
Statics
, вместо этого он разбит на несколько частей для более специфического использования, поэтому в этом случае это войдет в мойUrlHelper
классВ коде:
Синтаксис бритвы MVC3:
источник
/
вместо фактического имени.Url
вам сразу же может помочь помощник? Может быть, только вController
. Конечно, не в томViewModel
или ином месте,class
где это может вам понадобиться ..Может быть, это расширение или модификация ответов, опубликованных здесь, но я использую просто следующую строку, и это работает:
Когда мой путь:
http://host/iis_foldername/controller/action
тогда я получаю:
http://host/iis_foldername/
источник
Следующий фрагмент хорошо работает для меня в MVC4 и не нуждается в
HttpContext
доступном:источник
jQuery.load()
для создания URL для контроллера и действия, которое я хочу вызвать:$('#myplaceholder').load('@(Html.Raw(HttpRuntime.AppDomainAppVirtualPath))/MyController/MyAction', ...);
Хитрость в том, чтобы полагаться на IIS, заключается в том, что привязки IIS могут отличаться от ваших общедоступных URL-адресов (я смотрю на WCF), особенно на производственных машинах с несколькими компьютерами. Я склоняюсь к использованию конфигурации для явного определения «базового» URL-адреса для внешних целей, поскольку он имеет тенденцию быть немного более успешным, чем извлечение его из объекта Request.
источник
Для абсолютного базового URL используйте это. Работает как с HTTP и HTTPS.
источник
Это преобразование свойства asp.net в MVC . Это почти все пение, все танцы, получение корневого метода URL.
Объявите вспомогательный класс:
Использование:
Для использования с контроллера:
Чтобы использовать в представлении:
источник
В MVC _Layout.cshtml:
Вот что мы используем!
источник
<base>
. Также вы можете опустить Схему, чтобы она работала с http или https. Это означает, что вы можете начать URL с//
.Это прекрасно работает для меня (также с балансировщиком нагрузки):
Особенно, если вы используете нестандартные номера портов, использование Request.Url.Authority на первый взгляд кажется хорошим лидером, но в среде LB терпит неудачу.
источник
У вас может быть статический метод, который просматривает HttpContext.Current и решает, какой URL-адрес использовать (сервер разработки или работающий сервер) в зависимости от идентификатора хоста. HttpContext может даже предложить более простой способ сделать это, но это первый вариант, который я нашел, и он работает нормально.
источник
Вы можете использовать следующий скрипт:
источник
Для ASP.NET MVC 4 это немного отличается:
источник
Это работает в ASP .NET MVC 4 В любом действии контроллера вы можете написать: 1stline получает весь URL-адрес + строку запроса. 2-я строка удаляет локальный путь и запрос, последний символ '/'. 3-я строка добавляет символ «/» в последнюю позицию.
источник
в простом HTML и ASP.NET или ASP.NET MVC, если вы используете тег:
источник
Для URL с псевдонимом приложения, например http://example.com/appAlias/ ... Вы можете попробовать это:
источник
На самой веб-странице:
В JavaScript:
Это работает для моего проекта MVC, надеюсь, это поможет
источник
Я положил это в голову моего _Layout.cshtml
источник
Может быть, это лучшее решение.
с помощью
источник
Для MVC 4:
источник
Следующее сработало для меня
источник
--output http: // localhost: 49626 / TEST /
источник
Это было мое решение (с использованием .net core 3.1, в контроллере API):
источник
Просто в одну строку получи BaseUrl
источник
Также вы можете использовать это. Для бритвенных страниц лучше использовать его, чем другие.
https://ml-software.ch/posts/getting-the-base-url-for-an-asp-net-core-mvc-web-application-in-your-static-javascript-files
источник
добавьте эту функцию в статический класс в проект как служебный класс:
Содержание utility.cs :
используйте этот код в любом месте и наслаждайтесь им:
источник