C# 在Angular 2中解释MVC错误的最佳实践
我有一个用C#编写的MVC5后端。它提供用Razor编写的MVC视图和一些2页的视图 从客户端调用服务器时,处理潜在错误的最佳方法是什么?我真的很想建立一个在所有情况下都有效的模式。以下是我到目前为止所做的尝试 后端C#代码: 客户端2代码:C# 在Angular 2中解释MVC错误的最佳实践,c#,asp.net-mvc,angular,error-handling,C#,Asp.net Mvc,Angular,Error Handling,我有一个用C#编写的MVC5后端。它提供用Razor编写的MVC视图和一些2页的视图 从客户端调用服务器时,处理潜在错误的最佳方法是什么?我真的很想建立一个在所有情况下都有效的模式。以下是我到目前为止所做的尝试 后端C#代码: 客户端2代码: public loadDataFromServer() { let response = this.http.get(this.urlGetData) .map((res: Response) => res.json())
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);
}
public loadDataFromServer() {
let response = this.http.get(this.urlGetData)
.map((res: Response) => res.json())
.catch(this.handleResponseError);
response.subscribe(result => {
if (result.error) {
this.displayJsonError(this.urlGetUsers, result.error);
}
else {
// Process valid result
}
});
};
private handleResponseError(value: Response | any) {
let errorMessage = value.toString();
let response = value as Response;
if (response) {
errorMessage = `${response.status}: ${response.statusText}\n${response.toString()}`;
}
if (value.error) {
errorMessage = value.error;
}
if (value.message) {
errorMessage = value.message;
}
return Observable.throw(errorMessage);
}
private displayJsonError(url: string, error: string) {
console.error(`Call to '${url}' failed with ${error}`);
}
这是由handleError方法处理的错误对象的打印屏幕:
这一切都提出了一些问题:
我目前的建议是让服务器用Json对象响应所有已处理的异常 在客户端,在处理有效结果之前,我检查结果对象是否存在可能的错误属性 HandlerResponseError方法将解析类型化响应对象并抛出可观察消息。但至少我的浏览器(Chrome57)似乎能自动将响应错误记录到控制台上。所以,如果订阅服务器不需要对不同的错误进行特定的额外处理,那么订阅服务器就不需要对err对象执行额外的操作 如果有更好的方法,请反馈 后端C#代码: 客户端2代码:
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);
}
public loadDataFromServer() {
let response = this.http.get(this.urlGetData)
.map((res: Response) => res.json())
.catch(this.handleResponseError);
response.subscribe(result => {
if (result.error) {
this.displayJsonError(this.urlGetUsers, result.error);
}
else {
// Process valid result
}
});
};
private handleResponseError(value: Response | any) {
let errorMessage = value.toString();
let response = value as Response;
if (response) {
errorMessage = `${response.status}: ${response.statusText}\n${response.toString()}`;
}
if (value.error) {
errorMessage = value.error;
}
if (value.message) {
errorMessage = value.message;
}
return Observable.throw(errorMessage);
}
private displayJsonError(url: string, error: string) {
console.error(`Call to '${url}' failed with ${error}`);
}
如果
错误
是响应
对象,您想做什么?这看起来很晦涩,同时也有些过分:-D..@n00dl3 handleError方法取自web。调试时,我发现错误实际上是Response类型的。你认为应该是别的吗?我已经添加了上面的打印输出和当前的错误进行调查。请提供改进建议。