我有一個寫在我的Windows Phone 7項目中的函數。它將跟蹤每個HttpWebRequest的內容頭,如果內容類型是文檔(如Web郵件中的pdf附件),它將下載它。當文件名是英文時,該功能正常工作。但是,如果文件名不是ascii,例如中文和日文,它會在(HttpWebResponse)m_responseRequest.EndGetResponse(m_responseCallbackAsyncResult)中拋出System.ArgumentException。如何解決它?對我來說很重要,因爲我需要處理大量以中文命名的文件。以下是我的代碼:System.Net.Browser.ClientHttpWebRequest.EndGetResponse當header包含非ascii內容時拋出System.ArgumentException
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對象狀態) at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) at FotomaxWP71.ViewModel.WebViewModel。 < checkHeader> b _d(IAsyncResult m_responseCallbackAsyncResult) at System.Net.Browser.ClientHttpWebRequest。 <> C_ DisplayClassa.b _8(對象STATE2) 在System.Threading.ThreadPool.WorkItem.WaitCallback_Context(對象狀態) 在System.Threading.ExecutionContext.Run(的ExecutionContext的ExecutionContext,ContextCallback回調,對象狀態) 在系統.Threading.ThreadPool.WorkItem.doWork(對象O) 在System.Threading.Timer.ring() 的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.ValidationHelper.CheckBadWebHeaderChars (字符串名稱,布爾isHeaderValue) 在System.Net.WebHeaderCollection.set_Item(字符串名稱,字符串值) 在System.Net.Browser。 HttpWebRequestHelper.AddHeaderToCollection(WebHeaderCollection headerCollection,字符串headerName,字符串headerValue) 處系統System.Net.Browser.HttpWebRequestHelper.ParseHeaders(URI requestUri,SecurityCriticalDataForMultipleGetAndSet`1頭,WebHeaderCollection收集,布爾removeHttpOnlyCookies,HttpStatusCode &狀態,字符串&狀態說明) .Net.Browser.ClientHttpWebRequest.Progress(Object sender,EventArgs e) 在MS.Internal.CoreInvokeHandler.InvokeEventHandler(的Int32 typeIndex,代表handlerDelegate,對象發件人,對象參數) 在MS.Internal.JoltHelper.FireEvent(IntPtr的unmanagedObj,IntPtr的unmanagedObjArgs,的Int32 argsTypeIndex,的Int32 actualArgsTypeIndex,字符串eventName的)
非常感謝!
也許,Web服務器是不正確的內容處置頭編碼非ASCII文件名。使用某些工具(例如fiddler)檢查Web服務器響應標題以確定是否是問題所在。請參閱此鏈接以瞭解此編碼應該如何:http://www.motobit.com/help/scptutl/pa97。htm - 當然,這隻有在您對Web服務器有任何控制時纔會解決問題。 – VinayC