我有一個Web服務,在該服務中,我操作POST和GET方法以便於客戶端/服務器樣式體系結構中某些文件的上載/下載功能。基本上,用戶可以點擊按鈕下載特定文件,在應用程序中進行一些更改,然後點擊上傳按鈕將其發回。使用下載文件從服務器抓取文件的Webclient - 處理異常
問題我正在下載。假設用戶期望3個文件1.txt,2.txt和3.txt。服務器上不存在2.txt。
所以不得不像(服務器端)的代碼:
public class HttpHandler : IHttpHandler
{
public void ProcessRequest
{
if (context.Request.HttpMethod == "GET")
{
GoGetIt(context)
}
}
private static void GoGetIt(HttpContext context)
{
var fileInfoOfWhereTheFileShouldBe = new FileInfo(......);
if (!fileInfoOfWhereTheFileShouldBe.RefreshExists())
{
//Remove this line below
//throw new Exception("Oh dear the file doesn't exist");
//Replace with a force return of whichever code I chose e.g. 200
??...
}
...
所以,我有問題是,當我運行該應用程序,我用在客戶端側上的Web客戶端使用DownloadFile方法,其然後使用我得到的代碼如下:
WebException未處理:遠程服務器返回錯誤:(500)內部服務器錯誤。
(在調試過程中)如果我連接到瀏覽器並使用http://localhost:xxx/1.txt
,我可以逐步瀏覽服務器端代碼並按預期引發異常。所以我想我想知道如何正確處理客戶端的內部服務器錯誤,以便我可以返回一些有意義的內容,如「文件不存在」。一個想法是使用圍繞WebClient.DownloadFile(address, filename)
方法的嘗試,但我不確定這是否會發生唯一的錯誤,即文件不存在。
編輯:使用的HttpResponse
所以,如果我使用的HttpResponse,我能得到一些建議,如何啓動解決以下?
我從客戶端刪除異常拋出,並替換爲自定義HttpResponse?所以基本上我想我會選擇一個代碼來使用,比如說200,並強制返回代碼200,如果上面的語句。見評論。
然後在客戶端只使用If (Response.StatusCode == 200)
,做任何我想做的事(通知用戶文件不存在)
我沿着正確的線路是?
編輯2:
我一直在使用我的周圍文件拷貝方法嘗試捕捉嘗試,然後在catch,設置狀態代碼或狀態的描述,但這種設置狀態說明時拋出異常。 。像這樣:
context.Response.StatusDescription = ex.ToString();
context.Response.Status = ex.ToString();
ArgumentOutOfRangeException - 指定的參數超出了有效值的範圍。
是出於安全原因? IHttpHandler中的異常有什麼問題? – baron 2010-03-15 03:49:48
@baron:他們不會以任何有意義的方式傳播給客戶端。 – 2010-03-15 04:07:23
@Paulo Santos - 你能迴應我的編輯嗎? – baron 2010-03-16 01:53:15