Jak uzyskać informacje o wyjątku podczas wywoływania usługi internetowej JSON
W .NET 3.5 miałem następujący kod:
[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();
}
}
Kiedy zadzwonię, jeśli podam niepoprawną nazwę użytkownika i hasło,InvalidUsernameOrPasswordException
byłoby rzucone i mogłem złapać wyjątek w JavaScript, patrząc naerror.get_exceptionType()
. Dzieje się tak, ponieważ usługa sieciowa serializowałaby informacje o wyjątku w JSON.
Jednak po uaktualnieniu do .NET 4.5 to się zepsuło. Teraz, gdy przekazuję nieprawidłową nazwę użytkownika i hasło, otrzymuję odpowiedź 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":""}
Zasadniczo typ wyjątku jest tracony i zastępowany ogólnym komunikatem o błędzie.
Co spowodowało zmianę tego zachowania i czy nadal istnieje sposób na zwrócenie informacji o wyjątkach w JSON? Prawie całe moje API jest zaprojektowane tak, aby polegać na tym zachowaniu.