私はC#で書かれたMVC 5バックエンドを持っています。これは、Razorで書かれたMVCビューといくつかのAngular 2ページを提供します。MVCエラーを角2で解釈するためのベストプラクティス
クライアントからサーバーを呼び出す際の潜在的なエラーを処理する最善の方法は何ですか?私は本当に頑丈で、あらゆる場面で使えるパターンを確立したいと思っています。以下は私がこれまでに試したことです。
バックエンドのC#コード:
public class MyController : Controller
{
[HttpGet]
public ActionResult GetUsers()
{
try
{
// Lot of fancy server code ...
throw new Exception("Dummy error");
return GetCompressedResult(json);
}
catch (Exception ex)
{
throw new HttpException(501, ex.Message);
}
}
private FileContentResult GetCompressedResult(string json)
{
// Transform to byte array
var bytes = Encoding.UTF8.GetBytes(json);
// Compress array
var compressedBytes = bytes.Compress();
HttpContext.Response.AppendHeader("Content-encoding", "gzip");
return new FileContentResult(compressedBytes, "application/json");
}
}
クライアント側アンギュラ2コード:
:これはhandleErrorの方法で処理エラーオブジェクトのPrintScreenをある
public loadDataFromServer() {
let response = this.http.get(this.urlGetData)
.map((res: Response) => res.json())
.catch(this.handleError);
response.subscribe(response => {
// Process valid result ...
},
err => { console.error(err); }
);
};
private handleError(error: Response | any) {
let errMsg: string;
if (error instanceof Response) {
const body = JSON.parse(JSON.stringify(error || null))
const err = body.error || JSON.stringify(body);
errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
} else {
errMsg = error.message ? error.message : error.toString();
}
console.error(errMsg);
return Observable.throw(errMsg);
}
これはすべての質問を提起する:
- サーバーからカスタムHttpExceptionをスローするのは正しいですか?
- handleErrorメソッドが正しいか、それとも複雑すぎるのでしょうか?
- クライアント側では、カスタムエラーメッセージを表示したいと思いますが、現在のところ、HTMLの膨大な "BLOB"にしか見つかりません。このBLOBは解析するのが面倒です。
- クライアント側のエラー処理が必要ですか?
あなたは 'ERROR'は' Response'オブジェクトがある場合の対処しようとしていますか?これは同時に非常に不明瞭で過度のものです.-D ... – n00dl3
@ n00dl3 handleErrorメソッドはWebから取得します。デバッグするとき、私は実際にはエラーがタイプResponseであることがわかります。あなたはそれが別のものでなければならないと提案しますか?私は調査のために現在のエラーで上記のプリントアウトを追加しました。提案された改善についてアドバイスをお願いします。 –