ASP.NET Core에서 내 사이트의 기본 URL을 어떻게 얻을 수 있습니까?
제 웹사이트가 www.example.com 의 제 웹사이트 폴더에 호스팅되어 있다고 가정하면, 저는 https://www.example.com/mywebsite/home/about 을 방문합니다.
MVC 컨트롤러에서 기본 URL 부분을 가져오려면 어떻게 해야 합니까?제가 찾고 있는 부분은 https://www.example.com/mywebsite 입니다.
여기 나열된 예제는 요청에 액세스할 수 없기 때문에 작동하지 않습니다.ASP.NET Core의 URL
당신은 여전히 당신이 필요로 하는 것을 조립할 수 있어야 합니다.컨트롤러가 다음에서 상속되는 경우 요청 개체에 액세스할 수 있습니다.Controller
.
VS2017을 사용하는 경우 새 ASPNet Core MVC 앱을 시작하고 홈 컨트롤러를 다음으로 교체합니다.
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();
}
}
"정보" 방법에 관심을 가질 만한 내용을 몇 가지 넣었지만, 나머지 요청 클래스를 탐색하여 사용 가능한 다른 항목이 무엇인지 알아야 합니다.
@Tseng이 지적했듯이 IIS 또는 Azure App Service 뒤에서 Kestrel을 실행할 때 문제가 있을 수 있지만 IIS 통합 패키지 또는 Azure App Services 패키지를 사용하는 경우(Nuget 패키지를 설치하고 Program.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를 노출하는 것은 다소 중복될 수 있지만 매우 유용하다고 생각합니다.
Startup.cs 에 있는 Configfure 메서드의 파이프라인에 추가하는 것이 좋습니다.
app.UseHttpContext()
거기서부터 코드의 어디에서나 사용하기가 쉽습니다.
var appBaseUrl = MyHttpContext.AppBaseUrl;
이 모든 기존 답변은 다음과 같습니다.HttpContext
수신 요청 중에만 사용할 수 있는 개체입니다.하지만, 저는 백그라운드 서비스에서 URL을 얻어야 했습니다.HttpContext
사용할 수 없습니다.
이 정보는 다음 웹 사이트에서도 확인할 수 있습니다.Microsoft.AspNetCore.Hosting.Server.IServer
서비스(실제 호스트 서비스가 이 정보를 제공하는 한).기본 Kestrel 서버를 사용하고 있다면 실제로 제공되는 것으로 확인됩니다.IIS를 진행 중이거나 다른 호스팅 모델과 함께 호스팅할 때는 테스트하지 않았습니다.
은 당은예들볼있습다니필가의 를 들어야 합니다.IServer
그리고 나서 그것을 찾습니다..Features
▁of 형식의 .IServerAddressesFeature
음은 을에직접 URL 져는방다니에서 IServiceProvider
:
using Microsoft.AspNetCore.Hosting.Server;
using Microsoft.AspNetCore.Hosting.Server.Features;
public static ICollection<string> GetApplicationUrls(this IServiceProvider services)
{
var server = services.GetService<IServer>();
var addresses = server?.Features.Get<IServerAddressesFeature>();
return addresses?.Addresses ?? Array.Empty<string>();
}
하지만 주사를 놓아도 같은 일을 할 수 있습니다.IServer
DI 서비스를 사용할 수 있는 경우.
using Microsoft.AspNetCore.Http;
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
public AccountController(IHttpContextAccessor httpContextAccessor)
{
var request = httpContextAccessor.HttpContext.Request;
var domain = $"{request.Scheme}://{request.Host}";
//domain => https://varunsoft.in
}
에서 NPNelson 응답이 작동합니다.Value.ToString()
var baseUrl = $"{this.Request.Scheme}://{this.Request.Host.Value.ToString()}{this.Request.PathBase.Value.ToString()}";
var baseUrl = Request.GetTypedHeaders().Referer.ToString();
이렇게 하면 기본 URL 정보를 캡처할 수 있습니다.
이것이 제가 Asp에서 얻을 수 있는 방법입니다.NetCore 3.1 버전.
아래 링크에서 리소스에 액세스할 수 있습니다.
string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Authority, Url.Content("~"));
자세한 내용은 여기에서 확인할 수 있습니다.ASP.NET MVC에서 웹 앱의 기본 URL을 얻으려면 어떻게 해야 합니까?
언급URL : https://stackoverflow.com/questions/43526630/how-can-i-get-the-baseurl-of-my-site-in-asp-net-core
'programing' 카테고리의 다른 글
Oracle의 JDBC 쿼리 시간 초과는 어떻게 구현됩니까? (0) | 2023.06.13 |
---|---|
Visual Studio 2015에서 Typings.json for Typescript에 타이핑을 추가하려면 어떻게 해야 합니까? (0) | 2023.06.13 |
TokenRefresh()에서 호출할 Firebase FCM 힘 (0) | 2023.06.08 |
프로그래밍 방식으로 UIScrollView 스크롤 (0) | 2023.06.08 |
.NET 해시 테이블 대 사전 - 사전이 그렇게 빠를 수 있습니까? (0) | 2023.06.08 |