Если мое приложение ASP.NET MVC развернуто по адресу http://www.foobar.com/app, то я хочу получить этот корневой URL.Где я могу получить базовый путь Uri/root?
Я хочу поэтому сделать это в каком-то месте:
var scheme = HttpContext.Current.Request.Url.Scheme;
var host = HttpContext.Current.Request.Url.Host;
var port = HttpContext.Current.Request.Url.IsDefaultPort
?
string.Empty : string.Format(":{0}", HttpContext.Current.Request.Url.Port);
var applicationRootUrl =
string.Format("{0}://{1}{2}", scheme, host, port);
Вариант А Если я делаю это в Application_Start
даже в Global.asax
, то HttpContext.Current.Request
не доступны в то время.
Вариант B Я мог бы сделать это в каком-то случае, когда поступает запрос пользователя (BeginRequest
, я думаю, или что-то. Не знаю его имени, но можете посмотреть его), и проверить, если у меня уже есть основание путь, то я не реконструирую путь, иначе я создам путь к приложению.
Опция C Для этого я мог бы написать HTTP-модуль или фильтр действий.
Однако варианты B и C незначительно ухудшают производительность, поскольку они будут выполнять эту проверку с каждым запросом, хотя они будут только строить Url с первым запросом.
Итак, где я могу создать базовый url моего приложения?
PS: Я использую ASP.NET MVC 5.2.3 и таргетинг v4.6 платформы .NET (и, следовательно, v4.6 ASP.NET).
Можете ли вы не просто создать статический метод в статическом классе и просто вызвать его, когда вам это нужно? – JamieD77
@ JamieD77 Точно. Вопрос: *, когда * называть его, чтобы он не стоил проверки каждый раз. –
это трудно сказать, так как не совсем понятно, что вы хотите с этим делать. – JamieD77