ASP.NET Core에서 절대 URL을 생성하는 방법

5970 단어 csharpdotnetaspnet
URL은 웹을 웹으로 만드는 것입니다. ASP.NET Core 컨트롤러, Razor 페이지 및 Razor 보기에는 Url 에 대한 액세스를 제공하는 UrlHelper 속성이 있습니다. UrlHelper를 사용하여 MVC 작업, 페이지 및 경로에 대한 URL을 생성할 수 있습니다. 이 C# 표현식을 살펴보십시오.

Url.Action(action: "Home", controller: "Privacy")


이 식의 결과는 Privacy : HomeController 에 대한 "/Home/Privacy" 작업을 가리키는 URL 문자열이 됩니다.

이것은 절대 경로일 뿐이지만 유효한 URL이며 제대로 작동해야 합니다. 그러나 때때로 체계, 호스트 이름 또는 도메인 이름 및 포트를 포함하는 절대 URL을 얻고자 할 수 있습니다. 이를 위해 UrlHelper의 메서드에는 체계인 protocol와 호스트 이름 또는 도메인 이름인 host를 지정하는 오버로드가 있습니다. 이 C# 표현식을 살펴보십시오.

Url.Action(action: "Home", controller: "Privacy", values: null, protocol: "https", host: "your-website")


프로토콜과 호스트를 지정하면 결과는 이제 "https://your-website/Home/Privacy" 입니다.

그러나 host 매개변수를 생략하고 protocol 매개변수를 유지하면 host 매개변수가 현재 HTTP 요청에 사용되는 호스트로 기본 설정되기 때문에 결과는 여전히 절대 URL이 됩니다.

Url.Action(action: "Home", controller: "Privacy", values: null, protocol: "https")


결과는 "https://localhost:7184/Home/Privacy" 와 같습니다. 이 HTTP 요청을 만드는 데 사용된 호스트와 포트가 무엇이든 이 URL을 생성하는 데 사용됩니다.

ASP.NET Core에서 HTTP 요청을 처리할 때 SchemeHttpRequest 속성에도 액세스할 수 있으므로 체계를 protocol 매개 변수로 전달하여 동일한 체계 및 호스트로 URL을 생성할 수 있습니다. 현재 HTTP 요청으로.

Url.Action(action: "Privacy", controller: "Home", values: null, protocol: Request.Scheme)

Request.Host 매개변수로 host를 전달할 수도 있지만 protocol 매개변수를 지정하지 않고 host를 지정하면 이미 현재 HTTP 요청에서 호스트를 사용하므로 그럴 필요가 없습니다.
UrlHelper에 대한 액세스 권한이 없거나 UrlHelper가 지원하지 않는 방식으로 URL을 구축해야 하는 경우 어떻게 합니까?
HttpRequest 에서 속성을 가져와서 현재 HTTP 요청에 대한 절대 기본 URL을 만들 수도 있습니다. 다음 코드는 절대 경로 "/your/custom/path"에 대한 절대 URL을 빌드합니다.

$"{Request.Scheme}://{Request.Host}{Request.PathBase}/your/custom/path"


이 표현식의 결과는 "https://localhost:7184/your/custom/path" 와 같습니다.
현재 절대 경로를 포함한 전체 절대 URL이 필요한 경우 다음 C# 식을 사용할 수 있습니다.

$"{Request.Scheme}://{Request.Host}{Request.PathBase}{Request.Path}"


HTTP 요청이 없으면 어떻게 됩니까?
BackgroundWorker 를 사용하여 일부 백그라운드 처리를 수행하는 경우와 같이 코드에서 처리하는 HTTP 요청이 없는 경우 체계를 가져와 다른 방식으로 호스팅해야 합니다. 원하는 체계와 호스트를 구성에 저장하거나 단일 속성에 결합하여 구성에 저장할 수 있습니다. 일단 구성되면 구성에서 추출하여 절대 URL을 구축하는 데 사용하십시오.

결론



기본적으로 UrlHelper 메서드는 체계, 호스트 이름 및 포트 번호를 포함하지 않기 때문에 전체 절대 URL과 동일하지 않은 절대 경로를 생성합니다. 그러나 UrlHelper 메서드에는 전체 절대 URL을 생성할 수 있는 오버로드가 포함되어 있습니다.
HttpRequest 속성을 사용하거나 구성에서 원하는 체계와 호스트 이름을 저장한 다음 추출하여 절대 URL을 수동으로 빌드할 수도 있습니다.

대부분의 경우 절대 경로를 사용하는 것으로 충분하며 HTML에 일부 문자를 저장하지만 기술적 SEO 및 소셜 메타 태그와 같은 경우 절대 URL이 필요한 경우가 있습니다.

좋은 웹페이지 즐겨찾기