クライアント/サーバー スタイルのアーキテクチャで一部のファイルのアップロード/ダウンロード機能を容易にするために、POST メソッドと GET メソッドを操作する Web サービスがあります。基本的に、ユーザーはボタンをクリックして特定のファイルをダウンロードし、アプリでいくつかの変更を加えてから、アップロード ボタンをクリックして送り返すことができます。
私が抱えている問題はダウンロードにあります。ユーザーが 1.txt、2.txt、3.txt の 3 つのファイルを期待しているとします。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
??...
}
...
したがって、私が抱えている問題は、アプリケーションを実行し、クライアント側で WebClient を使用して DownloadFile メソッドを使用し、上記のコードを使用すると、次のようになることです。
WebException が処理されませんでした: リモート サーバーがエラーを返しました: (500) 内部サーバー エラー。
(デバッグ中)ブラウザにアタッチして使用するとhttp://localhost:xxx/1.txt
、サーバー側のコードをステップ実行して、意図したとおりに例外をスローできます。したがって、クライアント側で内部サーバーエラーを適切に処理して、「ファイルが存在しません」などの意味のあるものを返すことができるかどうか疑問に思っていると思います。メソッドの周りに try catch を使用することも考えられましたが、WebClient.DownloadFile(address, filename)
発生する唯一のエラー、つまりファイルが存在しないかどうかはわかりません。
編集:HttpResponseを使用したソリューションに従う
HttpResponse を使用する場合、開始方法についていくつか提案をいただけないでしょうか?
クライアント側から例外スローを削除し、カスタム HttpResponse に置き換えますか? したがって、基本的には、使用するコード、たとえば 200 を選択し、上記の if ステートメントでリターン コード 200 を強制すると思います。コメントを参照してください。
次に、クライアント側でIf (Response.StatusCode == 200)
、やりたいことを何でも使用して実行します(ユーザーファイルが存在しないことを通知します)
私は正しい線に沿っていますか?
編集2:
ファイルコピーメソッドの周りでtry catchを使用してから、キャッチでステータスコードまたはステータスの説明を設定しようとしましたが、ステータスの説明を設定すると例外がスローされます..次のように:
context.Response.StatusDescription = ex.ToString();
context.Response.Status = ex.ToString();
ArgumentOutOfRangeException - 指定された引数が有効な値の範囲外でした。