Wie der Titel schon sagt, habe ich 500 interne Serverfehler von der GET-Anforderung bis zu einer IQueryable-Aktion. Der Hauptteil des Fehlers ist leer. Dieser Fehler tritt auf, nachdem meine Aktion das Ergebnis zurückgegeben hat.
Ich verwende ASP.NET Web API RC.
Wie kann ich eine Stapelverfolgung dieses Fehlers erhalten?
exception-handling
asp.net-web-api
seltsam
quelle
quelle
Antworten:
Nach RC wurde dieses Problem behoben und Sie erhalten neben dem 500 Internal Server Error auch Fehlerdetails. (Dieses Problem wurde jedoch nur für Webhost-Szenarien behoben.)
Sie können Folgendes tun, um die Details der tatsächlichen Ausnahme abzurufen, die während der WriteToStream-Methode eines Formatierers auftreten kann.
quelle
Sie können versuchen, Folgendes hinzuzufügen:
zu Ihrem
Application_Start()
in der Global.asax. Diese Lösung funktioniert für viele der häufigsten Fehler.Wenn Sie jedoch keine zufriedenstellenden Informationen erhalten, sollten Sie einen Ausnahmefilter schreiben und global registrieren.
Dieser Artikel soll Ihnen den Einstieg erleichtern. Der Kern dessen, was Sie brauchen, ist das Schreiben und Registrieren von etwas wie:
quelle
.ToList()
, die Abfrage zu überprüfen. 3) Deaktivieren oder debuggen Sie die 2. Hälfte aller Nachrichtenhandler (ContinueWith()
Abschnitt) oder 3) Die Ausgabeformatierung ist fehlerhaft (json oder xml). Verwenden Sie also fiddler / was auch immer, um nach einem alternativen Format zu fragen.Ich bin auf dasselbe Problem gestoßen. Ich fand Kiran Challas Antwort hilfreich, um die eigentliche Ausnahme außerhalb meiner Aktion zu werfen.
Um mein Problem zu lösen, habe ich die ProxyCreationEnabled-Eigenschaft meines Kontexts auf false gesetzt und bin einen Schritt weiter gegangen .
In meinem Szenario war meine nächste Ausnahme auf einen Zirkelverweis in meinen Modellen zurückzuführen. Nach dem Aufräumen war die Phantom 500-Antwort weg. Viel Glück, wenn Sie dies noch nicht gelöst haben!
quelle
Dies kann mit einem Zirkelverweis zusammenhängen.
http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#handling_circular_object_references
Fügen Sie der Application_Start-Methode in der Datei Global.asax den folgenden Code hinzu:
quelle
Eine täuschend einfache Routing-Schwäche verursachte in meinem Fall dieses Problem: In meinem Api-Controller befand sich ein weiterer HttpPost mit derselben Signatur (nicht Name). Das Standardrouting löste die Namensunterschiede nicht auf, und der ServiceError 500 war die Antwort, die er gab, bevor eine der API-Funktionen erreicht wurde. Lösung: Ändern Sie das Standardrouting oder Ihre Signaturen und versuchen Sie es erneut.
Hier ist meine RouteConfig.cs, die für die Standardnutzung von WebApi2 recht gut funktioniert:
quelle
Ich hatte das Problem in RC, als ich die Abfrageparameter nicht in der richtigen Reihenfolge angab. Wenn Sie beispielsweise angeben
$skip=0
, wird 500 angezeigt, wenn Sie jedoch$orderby=xxx&skip=0
keinen Fehler angeben .quelle
Dieses Szenario wurde aus folgenden Gründen verursacht
Das Problem trat aufgrund einer fehlerhaften Web.config auf. (Mehrere configSections)
Anstatt einen Roslyn- Ordner im Bin- Ordner zu erstellen , habe ich ihn im Stammverzeichnis erstellen lassen . (Bereitstellungsort.)
Der beste Weg, dies zu diagnostizieren, bestand darin, eine einfache HTML-Seite am Anwendungsort abzulegen und zu versuchen, sie zu durchsuchen. 500 Die Fehlerbeschreibung wird auf dieser HTML-Seite angezeigt.
Und vergessen Sie auch nicht hinzuzufügen
zu Web.config
quelle
Normalerweise verwende ich Global.asax, um alle Fehler abzufangen. Hier ist ein Code-Snip, den Sie verwenden können
quelle
Ich hatte das gleiche Problem, aber die Quelle war etwas anders: Ich habe die
CORS
Richtlinie falsch eingestellt und das gibt mir500 Internal server error
, aber daCORS
es nicht funktionierte, wurde derAccess-Control-Allow-Origin
Header nicht als Antwort angezeigt und der Browser kann die tatsächliche Antwort nicht lesenIch habe es mit der Option ChromeDevTools gelöst, mit
Copy as cURL
der ich die Antwort sehen und die Fehlerquelle verstehen kannquelle
Fredrik Normén hat einen großartigen Blog-Beitrag mit dem Titel ASP.NET Web API Exception Handling zu diesem Thema geschrieben. Seine Lösung verwendet benutzerdefinierte Ausnahmeklassen und ein Ausnahmefilterattribut, das auf alle
ApiController
Aktionsmethoden angewendet werden kann.quelle