ASP.NET Core에서 URL 인코딩 및 디코딩


113
HttpContext.Current.Server.UrlEncode

.NET Framework에서만 작동합니다. ASP.NET Core 프로젝트에서 URI 인수를 인코딩하거나 디코딩하려면 어떻게해야하나요?


2
ASP.NET Core 또는 웹이 아닌 프로젝트에는 HttpContext가 없습니다. 동일한 방법 열린 클래스의 방법, 예를 통해 사용할 Uri.EscapeDataString , Uri.EscapeUriString
파나지오티스 Kanavos

1
@PanagiotisKanavos 잘못은 - 아무 없다 HttpContext.Current하지만 HttpContext닷넷 코어의 일부입니다 - Microsoft.AspNetCore.Http.HttpContext. 이 기억
J. 미상

전체 설명을 읽는 것을 잊지 마십시오. 언급 한 HttpContext는 이전 버전의 HttpContext와 매우 다릅니다. 그것은이다 훨씬 더 일반적인 열린 우리당의 방법을 사용
파나지오티스 Kanavos

답변:


186
  • ASP.NET Core 2.0+의 경우 System.Net네임 스페이스를 추가하기 만하면 WebUtility됩니다. 클래스는 System.Runtime.Extensions기본적으로 ASP.NET Core 프로젝트에서 참조되는 nuget 패키지의 일부로 제공됩니다 .

  • 이전 버전의 경우 Microsoft.AspNetCore.WebUtilities너겟 패키지를 추가하십시오 .

그런 다음 WebUtility수업을 사용할 수 있습니다.

public static class WebUtility
{
    public static string UrlDecode(string encodedValue);
    public static string UrlEncode(string value);
}

6
SDK 2.0.0+에 대해 나를 위해 작동하지 않았지만 Manuel Alves가 대답했습니다 (System.Net.WebUility).
matt.chatterley


43

ASP.Net Core 2.0+ 및 인코딩 할 공백이 필요한 경우 %20

반대로 +;

사용하다:

 Uri.EscapeDataString(someString);

2

시간을 낭비하지 마십시오. 소위 url 인코더에 대한 경험이 풍부하고 모두 쓸모없고 다른 단점이 있습니다. 예 : WebUtility.UrlEncode는 "+"기호를 처리하지 않습니다.

URL 매개 변수를 인코딩하려면 BASE58 인코딩을 사용하십시오. 알파벳 문자 + 숫자 만 사용하므로 URL 인코딩이 필요하지 않습니다.


이 모든 단점을 설명해 주시겠습니까? 저는 QueryHelpers.AddQueryString 또는 Uri.EscapeDataString이 수행하지 않는 +에만 익숙합니다.
Michael

방금 사용해 보았는데 WebUtility.UrlEncode더하기 기호 ( "+")를 "% 2B"로 훌륭하게 변환했습니다. .NET Core 3.1을 사용하고 있습니다.
Dejan

0

리디렉션을 사용하고 있으며 전체 URL을 인코딩하기 때문에 UrlEncode가 작동하지 않았습니다. 대신 아래에 표시된 UriHelper.Encode를 사용하여이 문제를 해결했습니다.

UriHelper.Encode

// generate url string...
return Redirect(Microsoft.AspNetCore.Http.Extensions.UriHelper.Encode(new System.Uri(url)));
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.