상대 URL을 전체 URL로 변환하려면 어떻게 해야 합니까?
이것은 아마도 예를 들어 설명하면 더 쉽게 설명될 것입니다."/Foo.aspx" 또는 "~/Foo.aspx"와 같은 상대 URL을 전체 URL로 변환하는 방법을 찾고 있습니다. 예를 들어 http://localhost/Foo.aspx입니다.사이트가 실행되는 도메인이 다른 테스트 또는 스테이지에 배포할 때 http://test/Foo.aspx 및 http://stage/Foo.aspx를 가져옵니다.
아이디어 있어요?
이것으로 재생(여기서 수정)
public string ConvertRelativeUrlToAbsoluteUrl(string relativeUrl) {
return string.Format("http{0}://{1}{2}",
(Request.IsSecureConnection) ? "s" : "",
Request.Url.Host,
Page.ResolveUrl(relativeUrl)
);
}
이 사람은 맞아 죽었지만 저는 다른 많은 답변들보다 더 깨끗한 저만의 해결책을 게시해야겠다고 생각했습니다.
public static string AbsoluteAction(this UrlHelper url, string actionName, string controllerName, object routeValues)
{
return url.Action(actionName, controllerName, routeValues, url.RequestContext.HttpContext.Request.Url.Scheme);
}
public static string AbsoluteContent(this UrlHelper url, string path)
{
Uri uri = new Uri(path, UriKind.RelativeOrAbsolute);
//If the URI is not already absolute, rebuild it based on the current request.
if (!uri.IsAbsoluteUri)
{
Uri requestUrl = url.RequestContext.HttpContext.Request.Url;
UriBuilder builder = new UriBuilder(requestUrl.Scheme, requestUrl.Host, requestUrl.Port);
builder.Path = VirtualPathUtility.ToAbsolute(path);
uri = builder.Uri;
}
return uri.ToString();
}
다음을 사용하여 새 URI를 생성하면 됩니다.page.request.url
그리고 나서 그것을 얻습니다.AbsoluteUri
그 중에서:
New System.Uri(Page.Request.Url, "Foo.aspx").AbsoluteUri
이것은 이것을 하기 위한 나의 도우미 기능입니다.
public string GetFullUrl(string relativeUrl) {
string root = Request.Url.GetLeftPart(UriPartial.Authority);
return root + Page.ResolveUrl("~/" + relativeUrl) ;
}
ASP.NET MVC를 사용하여 이 작업을 수행하는 방법을 공유하려고 합니다.Uri
수업과 약간의 연장 마술.
public static class UrlHelperExtensions
{
public static string AbsolutePath(this UrlHelper urlHelper,
string relativePath)
{
return new Uri(urlHelper.RequestContext.HttpContext.Request.Url,
relativePath).ToString();
}
}
그런 다음 다음을 사용하여 절대 경로를 출력할 수 있습니다.
// gives absolute path, e.g. https://example.com/customers
Url.AbsolutePath(Url.Action("Index", "Customers"));
중첩된 메서드 호출이 있는 것이 조금 보기 흉해서 더 확장하는 것을 선호합니다.UrlHelper
내가 할 수 있는 일반적인 행동 방법은 다음과 같습니다.
// gives absolute path, e.g. https://example.com/customers
Url.AbsoluteAction("Index", "Customers");
또는
Url.AbsoluteAction("Details", "Customers", new{id = 123});
전체 확장 클래스는 다음과 같습니다.
public static class UrlHelperExtensions
{
public static string AbsolutePath(this UrlHelper urlHelper,
string relativePath)
{
return new Uri(urlHelper.RequestContext.HttpContext.Request.Url,
relativePath).ToString();
}
public static string AbsoluteAction(this UrlHelper urlHelper,
string actionName,
string controllerName)
{
return AbsolutePath(urlHelper,
urlHelper.Action(actionName, controllerName));
}
public static string AbsoluteAction(this UrlHelper urlHelper,
string actionName,
string controllerName,
object routeValues)
{
return AbsolutePath(urlHelper,
urlHelper.Action(actionName,
controllerName, routeValues));
}
}
.NET URI 클래스를 사용하여 상대 경로와 호스트 이름을 결합합니다.
http://msdn.microsoft.com/en-us/library/system.uri.aspx
이것은 제가 변환을 하기 위해 만든 도우미 기능입니다.
//"~/SomeFolder/SomePage.aspx"
public static string GetFullURL(string relativePath)
{
string sRelative=Page.ResolveUrl(relativePath);
string sAbsolute=Request.Url.AbsoluteUri.Replace(Request.Url.PathAndQuery,sRelative);
return sAbsolute;
}
단순:
url = new Uri(baseUri, url);
ASP.NET MVC에서 의 오버로드를 사용하거나 를 사용할 수 있습니다.protocol
또는host
매개 변수이러한 매개 변수 중 하나가 비어 있지 않으면 도우미는 절대 URL을 생성합니다.사용 중인 확장 방법은 다음과 같습니다.
public static MvcHtmlString ActionLinkAbsolute<TViewModel>(
this HtmlHelper<TViewModel> html,
string linkText,
string actionName,
string controllerName,
object routeValues = null,
object htmlAttributes = null)
{
var request = html.ViewContext.HttpContext.Request;
var url = new UriBuilder(request.Url);
return html.ActionLink(linkText, actionName, controllerName, url.Scheme, url.Host, null, routeValues, htmlAttributes);
}
레이저 뷰에서 사용합니다. 예:
@Html.ActionLinkAbsolute("Click here", "Action", "Controller", new { id = Model.Id })
오래된 질문이지만, 많은 답들이 불완전하기 때문에 답을 해야겠다고 생각했습니다.
public static string ResolveFullUrl(this System.Web.UI.Page page, string relativeUrl)
{
if (string.IsNullOrEmpty(relativeUrl))
return relativeUrl;
if (relativeUrl.StartsWith("/"))
relativeUrl = relativeUrl.Insert(0, "~");
if (!relativeUrl.StartsWith("~/"))
relativeUrl = relativeUrl.Insert(0, "~/");
return $"{page.Request.Url.Scheme}{Uri.SchemeDelimiter}{page.Request.Url.Authority}{VirtualPathUtility.ToAbsolute(relativeUrl)}";
}
웹 양식에 대한 ResolveUrl 및 ResolveClientUrl과 마찬가지로 오프페이지의 확장으로 작동합니다.웹 양식이 아닌 환경에서 사용하려면 HttpResponse 확장으로 변환하십시오.표준 포트 및 비표준 포트에서 사용자 이름/암호 구성 요소가 있는지 여부에 따라 http 및 https를 모두 올바르게 처리합니다.또한 하드 코딩된 문자열(://)을 사용하지 않습니다.
여기 접근법이 있습니다.이것은 문자열이 상대적인지 절대적인지에 관계없이 사용하려면 baseUri를 제공해야 합니다.
/// <summary>
/// This function turns arbitrary strings containing a
/// URI into an appropriate absolute URI.
/// </summary>
/// <param name="input">A relative or absolute URI (as a string)</param>
/// <param name="baseUri">The base URI to use if the input parameter is relative.</param>
/// <returns>An absolute URI</returns>
public static Uri MakeFullUri(string input, Uri baseUri)
{
var tmp = new Uri(input, UriKind.RelativeOrAbsolute);
//if it's absolute, return that
if (tmp.IsAbsoluteUri)
{
return tmp;
}
// build relative on top of the base one instead
return new Uri(baseUri, tmp);
}
ASP.NET 컨텍스트에서 다음을 수행할 수 있습니다.
Uri baseUri = new Uri("http://yahoo.com/folder");
Uri newUri = MakeFullUri("/some/path?abcd=123", baseUri);
//
//newUri will contain http://yahoo.com/some/path?abcd=123
//
Uri newUri2 = MakeFullUri("some/path?abcd=123", baseUri);
//
//newUri2 will contain http://yahoo.com/folder/some/path?abcd=123
//
Uri newUri3 = MakeFullUri("http://google.com", baseUri);
//
//newUri3 will contain http://google.com, and baseUri is not used at all.
//
localhost 및 다른 포트 작업에 대한 다른 응답에서 수정됨...나는 이메일 링크를 위해 사용합니다.페이지나 사용자 제어뿐만 아니라 앱의 모든 부분에서 호출할 수 있습니다. HttpContext를 통과할 필요가 없기 때문에 Global에 입력했습니다.현재의.매개 변수로 요청
/// <summary>
/// Return full URL from virtual relative path like ~/dir/subir/file.html
/// usefull in ex. external links
/// </summary>
/// <param name="rootVirtualPath"></param>
/// <returns></returns>
public static string GetAbsoluteFullURLFromRootVirtualPath(string rootVirtualPath)
{
return string.Format("http{0}://{1}{2}{3}",
(HttpContext.Current.Request.IsSecureConnection) ? "s" : ""
, HttpContext.Current.Request.Url.Host
, (HttpContext.Current.Request.Url.IsDefaultPort) ? "" : ":" + HttpContext.Current.Request.Url.Port
, VirtualPathUtility.ToAbsolute(rootVirtualPath)
);
}
ASP.NET MVC를 할 수 .Url.Content(relativePath)
URL로 하다, URL로 변환하기
언급URL : https://stackoverflow.com/questions/126242/how-do-i-turn-a-relative-url-into-a-full-url
'programing' 카테고리의 다른 글
ORA-01849: 시간은 1에서 12 사이여야 합니다. (0) | 2023.06.30 |
---|---|
Angular 4 표현식이 확인된 후 변경됨 오류 (0) | 2023.06.30 |
트위터 부트스트랩 툴팁을 동적으로 생성된 요소에 바인딩하려면 어떻게 해야 합니까? (0) | 2023.06.30 |
64비트 마이크로소프트 SQL 서버 데이터 도구 (0) | 2023.06.30 |
ValueError: 지원되지 않는 피클 프로토콜: 3, python2 피클은 python3 피클이 덤프한 파일을 로드할 수 없습니까? (0) | 2023.06.30 |