Скажем, мой сайт хранится в сетевом папка www.example.com и я бываю https://www.example.com/mywebsite/home/about.
Как я могу получить базовый URL в контроллер MVC? Та часть, которую я ищу, https://www.example.com/mywebsite
Пример здесь Не'т работу, как мы Дон'т иметь доступ к запросу.URL-адрес в ASP.NET основной
Вы должны быть в состоянии собрать воедино то, что вам нужно. У вас есть доступ к объекту запроса, если ваш контроллер наследует от контроллер
.
Если вы используете VS2017, разжигаете новую Аспнет приложение MVC и заменить homecontroller с:
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
public IActionResult About()
{
ViewData["Message"] = $"{this.Request.Scheme}://{this.Request.Host}{this.Request.PathBase}";
return View();
}
public IActionResult Contact()
{
ViewData["Message"] = "Your contact page.";
return View();
}
public IActionResult Error()
{
return View();
}
}
Я просто положить в некоторые вещи, которые могут вас заинтересовать в "О" и способ, но вы должны исследовать остальную часть класса request, чтобы вы знали, что еще доступно.
Как @Цзэн отметил, что у вас возникли проблемы при работе Пустельга за IIS или веб-приложения Azure, но если вы используете пакет IISIntegration или пакет AzureAppServices (установить NuGet-пакет и добавить его в программу.CS на свой WebHostBuilder), он должен направить эти заголовки для вас. Он отлично работает для меня в Azure, потому что иногда мне приходится принимать решения, основываясь на которой имя они попали. Пакеты служб IIS/Azure также пересылать исходный удаленный IP-адрес, который я вхожу.
Если вам нужно это в любом месте в вашем приложении, чем вы должны построить промежуточное. Определить статический класс и ваш метод расширения для добавления промежуточного трубопровода такого сервиса.
public class MyHttpContext
{
private static IHttpContextAccessor m_httpContextAccessor;
public static HttpContext Current => m_httpContextAccessor.HttpContext;
public static string AppBaseUrl => $"{Current.Request.Scheme}://{Current.Request.Host}{Current.Request.PathBase}";
internal static void Configure(IHttpContextAccessor contextAccessor)
{
m_httpContextAccessor = contextAccessor;
}
}
public static class HttpContextExtensions
{
public static void AddHttpContextAccessor(this IServiceCollection services)
{
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
public static IApplicationBuilder UseHttpContext(this IApplicationBuilder app)
{
MyHttpContext.Configure(app.ApplicationServices.GetRequiredService<IHttpContextAccessor>());
return app;
}
}
Это может быть немного излишним, чтобы выставить объект HttpContext в этом случае, но я нахожу его очень полезным.
Вы бы, чем добавить его к трубопроводу в ваш метод Configfure который находится в запуске.в CS
app.UseHttpContext()
Оттуда это просто, чтобы использовать его в любом месте в коде.
var appBaseUrl = MyHttpContext.AppBaseUrl;
string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
вы можете проверить для получения дополнительной информации здесь: https://stackoverflow.com/questions/1288046/how-can-i-get-my-webapps-base-url-in-asp-net-mvc