调用JSON Web服务时如何获取异常信息

2023-12-06

在.NET 3.5中,我有以下代码:

[WebService(Namespace = "http://kitchenpc.com/schemas/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class KitchenPC : System.Web.Services.WebService
{
   [WebMethod]
   public LogonResult Logon(string username, string password)
   {
      //If username and password are not valid...
      throw new InvalidUsernameOrPasswordException();
   }
}

当我调用它时,如果我传递了无效的用户名和密码,InvalidUsernameOrPasswordException会被抛出,我可以通过查看 Javascript 来捕获异常error.get_exceptionType()。这是因为 Web 服务会将异常信息序列化为 JSON。

然而,当我升级到 .NET 4.5 后,这个问题就出现了。现在,当我传入无效的用户名和密码时,我会收到 HTTP 响应:

HTTP/1.1 500 Internal Server Error
Cache-Control: private
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/7.5
jsonerror: true
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Sat, 24 Nov 2012 22:42:33 GMT
Content-Length: 91

{"Message":"There was an error processing the request.","StackTrace":"","ExceptionType":""}

基本上,异常类型会丢失并替换为通用错误消息。

是什么导致了这种行为的改变,还有没有办法以 JSON 返回异常信息?我的整个 API 几乎都是为了依赖这种行为而设计的。


啊,这是一个愚蠢的问题。仅当您满足以下条件时才会显示异常信息:

<customErrors mode="Off" />

在你的 web.config 中(在<system.web>)。我实际上不确定这是否是 .NET 3.5 -> .NET 4.5 的行为变化,或者当我使用 web.config 转换重写 web.config 构建过程时它是否被破坏。

有谁知道是否有办法在每个网络服务级别上控制这个?我不想在正常页面请求上显示完整的调试信息。

Update:

我还得出这样的结论:抛出异常来从 Web 服务传递错误信息确实不是一个好的设计。事实上,我写了一个关于该主题的帖子在我的博客上,供感兴趣的人使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用JSON Web服务时如何获取异常信息 的相关文章

随机推荐