Internal Server Error 500 in der Web-APi-MVC4
Ich rief ein HttpPost-Methode aus controller, um die Web-API. Für andere Methoden, die Antwort ist OK und die Methode funktioniert gut, mit Ausnahme der unten genannten Methode, die besagt Fehler
{StatusCode: 500, ReasonPhrase: 'Internal Server Error', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Pragma: no-cache
Connection: Close
Cache-Control: no-cache
Date: Fri, 16 Aug 2013 09:49:25 GMT
Server: ASP.NET
Server: Development
Server: Server/10.0.0.0
X-AspNet-Version: 4.0.30319
Content-Length: 1855
Content-Type: application/json; charset=utf-8
Expires: -1
}}
Meine Methode
public int CustomerRegistration(CustomerRequestResponse req)
{
try
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(ConfigurationManager.AppSettings["ServerAddress"].ToString());
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
Uri gizmoUri = null;
var Response = client.PostAsJsonAsync("api/MyAccount/CustomerRegistration", req).Result;
int result = 0;
if (Response.IsSuccessStatusCode)
{
gizmoUri = Response.Headers.Location;
result = Response.Content.ReadAsAsync<Int32>().Result;
}
return result;
}
catch { throw; }
}
Wie könnte ich erkennen, wo ist der Fehler in meinem code. Irgendwelche Vorschläge ??
EDIT ::
Verfolgt der Fehler der Angabe "System.Net.Http.ObjectContent"
{Method: POST, RequestUri: 'http://localhost:56003/api/MyAccount/CustomerRegistration', Version: 1.1, Content: System.Net.Http.ObjectContent`1[[ServiceEntities.MyAccount.CustomerRequestResponse, ServiceEntities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]], Headers:
{
Accept: application/json
Content-Type: application/json; charset=utf-8
Content-Length: 495
}}
Irgendwelche Vorschläge für die Festsetzung es .?
EDIT1 :
</Message><ExceptionMessage>No MediaTypeFormatter is available to read an object of type 'CustomerRequestResponse' from content with media type 'text/plain'.</ExceptionMessage>
- Führen Sie Ihre API-controller im DEBUG. Es sollte aufhören zu Recht auf die fehlerhafte Zeile. Oder setzen Sie einen breakpoint an den Anfang dieser Methode und Schritt für Schritt durch, bis Sie den Fehler.
- ...sorry-ich verpasste einen wichtigen Punkt in Ihrem code -- wenn ich DEBUGGEN will ein setup wie dieses, das ich zwei getrennte Instanzen von VS -- ein mit dem client-code und einen mit dem api-code. Dies macht den Fang der server-Seite-Fehler Recht einfach. Vielleicht wollen Sie auch zu prüfen, Protokollierung unbehandelte Ausnahmen mit einer Aufrufliste des Event Log oder wo auch immer.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das erste, was ich tun würde, ist zu überprüfen, dass die Anforderung, die der client tut, richtig ist - ist die richtige url, Header, body. Um dies zu tun, können Sie aktivieren
fiddler
als proxy in der Anwendung. Fügen Sie diesen Abschnitt, um IhreWeb.config
und versuchen Sie, den code wieder mit fiddler öffnen - jetzt sollten Sie in der Lage sein die Anfrage in fiddler:Wenn die Anfrage ok ist, überprüfen Sie, dass der server Sie eine Verbindung herstellen möchten, ist eigentlich ausgeführt, und es gibt dir die richtige Antwort mit dem richtigen Header.
Vermute ich, dass es genug sein sollte, um das problem zu identifizieren.
BTW: Im wirklichen Leben hat Ihr
catch
block, etwas nützliches zu tun eigentlich? Um es mehr nützlich, als es jetzt ist, könnte man hinzufügen, einige log4net logging-das würde wahrscheinlich auch helfen, das identifizieren von zukünftigen Fragen.Ich denke, es ist ein Fehler während der Verarbeitung von Daten auf MyAccountController ist CustomerRegistration Aktion. Ich ziehe Sie zu überprüfen Sie Ihre controller, wenn ein Fehler Auftritt, während Sie Ihren Fortschritt.
Wenn Sie die standard-DLL (backend) und Web-Script (frontend: wie ashx-oder aspx -, etc.) setup, dann ist es leicht zu vergessen, hochzuladen (auf den server) eine änderung an der Web-Skript.
Ich erhielt eine Fehlermeldung, aber es ging Weg, wenn ich sicher gestellt, dass alle meine Codes/Skripts synchronisiert und auf den server hochgeladen.