C# 에서 사용되는 WebClient나 WebRequest, HttpWebRequest 등은 URL을 매개변수로 string 형태로도 받지만..
내부적으로 Uri Class로 처리하는지 Fiddler로 호출을 잡아 보면 특수문자가 인코딩되어 처리되는게 보입니다.
(보통 Url Encoding이나 Decoding을 처리하는데.. 처리가 안되어 있는 사이트등에서 문제가 됩니다..)
Uri Class의 Escape 자동 처리 부분을 제외하기 위해서 사용되는 방법 입니다.
//------------------------------------------ 사용 ---------------------------------------------
private void button1_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
Uri urd = new Uri(url);
DisableEscapePathAndQuery(urd);
CookieWebClient client = new CookieWebClient();
client.DownloadFile(urd, sfd.FileName);
}
}
//---------------------------------------------- 사용 ----------------------------------------------
//---------------------------------------------- Method ----------------------------------------------
private void DisableEscapePathAndQuery(Uri uri)
{
string pathAndQuery = uri.PathAndQuery; // PathAndQuery에 꼭 한번은 접근해야 함.
FieldInfo flagsField = typeof(Uri).GetField("m_Flags", BindingFlags.Instance | BindingFlags.NonPublic);
if(flagsField == null) return;
ulong flags = (ulong)flagsField.GetValue(uri);
flags -= ~((ulong)0x400);
flags -= ~((ulong)0x800);
// Flag 값은 .NetFramework Source 참조
// -> 참조용_URI_Framework.cs.txt 파일 확인
// E_PathNotCanonical = 0x400
// E_QueryNotCanonical = 0x800
// 위 두 값 제외
flagsField.SetValue(uri, flags);
}
//---------------------------------------------- Method ----------------------------------------------
* 처리 전 / 처리 후 비교
'.Net Framework Standard' 카테고리의 다른 글
[C#] WebService .asmx 오류 전역 (예외)처리 (1) | 2019.06.17 |
---|---|
[ClickOnce] 배포 후 업데이트 오류시- 폴더 삭제 혹은 Registry 삭제 (0) | 2018.08.28 |
Visual Studio에서 찾기 / 바꾸기 기능에서 정규식 사용 방법.. (1) | 2018.04.06 |
Visual Studio 2012 Web Project Debuging 시 IIS Express 64bit 사용하기 (0) | 2017.08.11 |
Windows SDK 기본 지원 ILDASM 툴에 대한 C# 소스 디어셈블리 보호.. (0) | 2016.08.01 |