【发布时间】:2012-10-09 14:30:22
【问题描述】:
我在控制器中有一个方法,如下所示:
[HttpPost]
public void UnfavoriteEvent(int id)
{
try
{
var rows = _connection.Execute("DELETE UserEvent WHERE UserID = (SELECT up.UserID FROM UserProfile up WHERE up.UserName = @UserName) AND EventID = @EventID",
new { EventID = id, UserName = User.Identity.Name });
if (rows != 1)
{
Response.StatusCode = 500;
Response.Status = "There was an unknown error updating the database.";
//throw new HttpException(500, "There was an unknown error updating the database.");
}
}
catch (Exception ex)
{
Response.StatusCode = 500;
Response.Status = ex.Message;
//throw new HttpException(500, ex.Message);
}
}
如您所见,我尝试了几种不同的方法来解决这个错误。在 JavaScript 中,我有以下代码块来调用此方法:
var jqXHR;
if (isFavorite) {
jqXHR = $.ajax({
type: 'POST',
url: '/Account/UnfavoriteEvent',
data: { id: $("#EventID").val() }
});
}
else {
jqXHR = $.ajax({
type: 'POST',
url: '/Account/FavoriteEvent',
data: { id: $("#EventID").val() }
});
}
jqXHR.error = function (data) {
$("#ajaxErrorMessage").val(data);
$("#ajaxError").toggle(2000);
};
现在,我要做的是将发生的错误返回到jqXHR.error 函数,以便我可以正确处理它。
目前未注释的代码会引发异常,指出我在 Status 中放置的文本是不允许的,而注释代码实际上返回标准错误页面作为响应(这并不奇怪)。
所以,我有几个问题:
- 如何正确抛出错误?
-
Response.Status属性有什么作用?
谢谢大家!
【问题讨论】:
-
由于您正在捕获一般异常,因此我不会将特定消息发送回客户端。这最终可能成为有关您的应用程序的敏感信息。如果您在控制消息的情况下捕获自定义域异常,则可以将它们发送给客户端,但对于一般异常,您应该发送一般消息。
-
@BZink,非常好的观点。谢谢。
标签: c# jquery .net error-handling asp.net-mvc-4