【发布时间】:2013-12-11 08:04:15
【问题描述】:
我有一个如下所示的服务器端操作:
namespace MyProduct.Presentation.Controllers
{
public class FooController : Controller
{
public ActionResult Delete(long[] fooIds)
{
throw new Exception("Something went wrong.");
}
}
}
我从客户端向该控制器发出 ajax 请求,如下所示:
var url = '/Foo/Delete';
$.ajax(url,
{
cache: false, async: false, type: 'POST',
data: JSON.stringify({ fooIds: fooIdsArray }), dataType: 'json',
contentType: 'application/json', traditional: true,
error: OnError, success: OnSuccess
});
function OnSuccess(data, textStatus, jqXHR) {
debugger;
}
function OnError(jqXHR, textStatus, errorThrown) {
debugger;
// Here, I want the text "Something went wrong",
// which I set as the Message property
// of my server side exception
}
如何将文本设置为服务器上引发的Exception 对象的Message 属性?
在这种情况下,客户端收到带有 HTTP 状态代码 500 的 HTML 响应。因此,我在 Fiddler 中看到我的响应如下所示:
HTTP/1.1 500 Internal Server Error
Server: ASP.NET Development Server/10.0.0.0
Date: Wed, 11 Dec 2013 07:47:26 GMT
X-AspNet-Version: 4.0.30319
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 10175
Connection: Close
<!DOCTYPE html>
<html>
<head>
<title>Could not delete category. This category has data associated with it. Please delete the associated data first.</title>
<meta name="viewport" content="width=device-width" />
<style>
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Consolas","Lucida Console",Monospace;font-size:11pt;margin:0;padding:0.5em;line-height:14pt}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
@media screen and (max-width: 639px) {
pre { width: 440px; overflow: auto; white-space: pre-wrap; word-wrap: break-word; }
}
@media screen and (max-width: 479px) {
pre { width: 280px; }
}
</style>
</head>
<body bgcolor="white">
<span><H1>Server Error in '/' Application.<hr width=100% size=1 color=silver></H1>
<h2> <i>Could not delete category. This category has data associated with it. Please delete the associated data first.</i> </h2></span>
<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">
<b> Description: </b>An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
<br><br>
<b> Exception Details: </b>System.Exception: Could not delete category. This category has data associated with it. Please delete the associated data first.<br><br>
<b>Source Error:</b> <br><br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code><pre>
Line 66: }
Line 67:
<font color=red>Line 68: throw new Exception(errorMessage);
</font>Line 69: }
Line 70: catch</pre></code>
</td>
</tr>
</table>
<br>
<b> Source File: </b> C:\Sathyaish\Clients\ESQ\SVN\GlobalizationUI.Presentation\Controllers\CategoryController.cs<b> Line: </b> 68
<br><br>
<b>Stack Trace:</b> <br><br>
<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code><pre>
[Exception: Could not delete category. This category has data associated with it. Please delete the associated data first.]
MyProduct.Presentation.Controllers.CategoryController.Delete(Int64[] categoryIds) in yada yada yada
</pre></code>
</td>
</tr>
</table>
<br>
<hr width=100% size=1 color=silver>
<b>Version Information:</b> Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.18055
</font>
</body>
</html>
<!--
[Exception]: Could not delete category. This category has data associated with it. Please delete the associated data first.
at MyProduct.Presentation.Controllers.CategoryController.Delete(Int64[] categoryIds) in ...yada yada yada...
【问题讨论】:
-
@Zabavsky:我对如何解决处理错误情况的一般问题并不感兴趣。我对处理 ASP.NET 抛出的异常的替代方法也不感兴趣。我知道所有的选择。我只是想知道序列化异常在 jQuery XHR 对象中转换为什么。似乎 XHR 并不关心返回的响应的细节,在这种情况下,它恰好是一个 HTML DOM,我感兴趣的值被嵌入到 DOM 中,我不想写一个DOM 解析例程以获取该值。
标签: jquery asp.net asp.net-mvc asp.net-mvc-4