Windows Phone 7 프로젝트에 작성된 함수가 있습니다. 각 HttpWebRequest의 컨텐트 헤더를 추적 할 것이고 컨텐트 유형이 문서 (예 : 웹 메일의 pdf 첨부 파일) 인 경우 다운로드 할 것입니다. 이 함수는 파일 이름이 영어 인 경우 잘 작동합니다. 그러나 파일 이름이 ASCII가 아니며 중국어와 일본어를 사용하면 (HttpWebResponse) m_responseRequest.EndGetResponse (m_responseCallbackAsyncResult)에 System.ArgumentException이 발생합니다. 그것을 고치는 방법? 내가 중국어로 지명 된 많은 파일을 처리 할 필요가있을 때 그것은 나에게 중요하다.System.Net.Browser.ClientHttpWebRequest.EndGetResponse throws System.ArgumentException 헤더에 ASCII가 아닌 콘텐츠가 포함 된 경우
private void _checkHeader(string m_uri)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(m_uri);
request.Method = "POST";
request.BeginGetRequestStream((asynchronousResult) =>
{
var m_readCallBackrequest = (HttpWebRequest)asynchronousResult.AsyncState;
m_readCallBackrequest.BeginGetResponse((m_responseCallbackAsyncResult) =>
{
var m_responseRequest = (HttpWebRequest)m_responseCallbackAsyncResult.AsyncState;
try
{
var resp = (HttpWebResponse)m_responseRequest.EndGetResponse(m_responseCallbackAsyncResult);
Debug.WriteLine(resp.Headers.ToString());
}
catch (WebException) { }
}, m_readCallBackrequest);
}, request);
}
그리고 예외 세부 사항 :
System.ArgumentException이 처리되지 않은했다 메시지 = "" 스택 트레이스 : System.Net.Browser.AsyncHelper.BeginOnUI에서 (SendOrPostCallback 다음은 내 코드입니다 beginMethod, Object state) 에서 System.Net.Browser.ClientHttpWebRequest.EndGetResponse (IAsyncResult asyncResult) at FotomaxWP71.ViewModel.WebViewModel. < checkHeader> b _d (IAsyncResult m_responseCallbackAsyncResult) at System.Net.Browser.ClientHttpWebRequest. 시스템에서 System.Threading.ThreadPool.WorkItem.WaitCallback_Context (객체 상태)에서 System.Threading.ExecutionContext.Run (ExecutionContext에 ExecutionContext에, ContextCallback 콜백, 객체 상태)에서 <> C_ DisplayClassa.b _8 (객체 상태 2) System.Threading.Timer.ring에서 .Threading.ThreadPool.WorkItem.doWork (객체 O) () 의 InnerException : System.ArgumentException 메시지 = net_WebHeaderInvalidControlChars] 인수 : 디버깅 리소스 문자열이 불가능하다. 키와 인수는 종종 문제를 진단하기에 충분한 정보를 제공합니다. http://go.microsoft.com/fwlink/?linkid=106663&Version=4.7.60408.0&File=System.Net.dll&Key=net_WebHeaderInvalidControlChars 매개 변수 이름을 참조하십시오 스택 트레이스 이름 : System.Net.WebHeaderCollection.set_Item (문자열 이름, 문자열 값) System.Net.Browser에서 에서 System.Net.ValidationHelper.CheckBadWebHeaderChars에서 (문자열 이름, 부울 isHeaderValue) 을. HttpWebRequestHelper.AddHeaderToCollection (WebHeaderCollection headerCollection, 문자열 헤더 이름, 문자열 headerValue라는) 시스템에서 System.Net.Browser.HttpWebRequestHelper.ParseHeaders (열린 우리당 requestUri, SecurityCriticalDataForMultipleGetAndSet`1 헤더, WebHeaderCollection 수집, 부울 removeHttpOnlyCookies, HttpStatusCode & 상태, 문자열 & 상태 설명) 에서 .Net.Browser.ClientHttpWebRequest.Progress (개체 보낸 사람, EventArgs 전자)MS.Internal.JoltHelper.FireEvent에서 MS.Internal.CoreInvokeHandler.InvokeEventHandler (INT32 typeIndex, 위임 handlerDelegate, 개체 보낸 사람, 개체 인수) (IntPtr입니다 unmanagedObj, IntPtr입니다 unmanagedObjArgs, INT32 argsTypeIndex, INT32 actualArgsTypeIndex, 문자열 EVENTNAME)에서 17,451,515,
고맙습니다.
아마도, 웹 서버가 내용 - 처리 헤더에 올바르게 ASCII가 아닌 파일 이름을 인코딩하지 않습니다. 일부 도구 (예 : 피들러)를 사용하여 웹 서버 응답 헤더를 검사하여 문제인지 확인합니다. 이 인코딩이 어떻게되어 있는지 이해하려면 다음 링크를 참조하십시오 : http://www.motobit.com/help/scptutl/pa97.htm - 물론 웹 서버를 제어 할 수있는 경우에만 문제가 해결됩니다. – VinayC