Erreur de Serveur interne 500 dans l'APi Web MVC4
J'ai appelé un HttpPost de la méthode du contrôleur de l'API Web. Pour les autres méthodes, la réponse est OK et la méthode fonctionne bien sauf la méthode mentionnée ci-dessous en indiquant l'erreur
{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
}}
Ma Méthode
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; }
}
Comment ai-je pu identifier où est l'erreur dans mon code. Toutes les suggestions ??
EDIT ::
A retracé l'erreur de spécification "du Système.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
}}
Toutes les suggestions de correction .?
EDIT1 :
</Message><ExceptionMessage>No MediaTypeFormatter is available to read an object of type 'CustomerRequestResponse' from content with media type 'text/plain'.</ExceptionMessage>
- Exécutez votre API contrôleur en DEBUG. Il doit s'arrêter juste sur la ligne de défectueux. Ou définissez un point d'arrêt en haut de cette méthode et l'étape jusqu'à l'erreur.
- ...désolé-j'ai raté un point clé dans votre code, quand je veux pour DÉBOGUER une installation comme celle-ci, je exécuter deux instances séparées de la VS, l'une avec le code client et un avec le code de l'api. Cela rend la capture des erreurs côté serveur assez facile. Vous pouvez également envisager de journalisation des exceptions non gérées avec une pile d'appel dans le Journal des Événements ou où.
Vous devez vous connecter pour publier un commentaire.
La première chose que je voudrais faire est de vérifier que la demande que le client est en train de faire est correcte - correction de l'url, en-têtes, corps. Pour ce faire, vous pouvez activer
fiddler
comme un proxy dans votre application. Ajouter cet article à votreWeb.config
et essayez d'exécuter à nouveau le code avec un violon ouvrez - vous devriez maintenant être en mesure de voir la demande dans un violon:Si la demande est ok, vérifiez que le serveur auquel vous essayez de vous connecter est en fait et en cours d'exécution et que c'est vous donner la bonne réponse correcte en-têtes.
Je suppose que cela devrait être suffisant pour identifier le problème.
BTW: Dans la vraie vie, est-ce que votre
catch
bloc de faire quelque chose d'utile en fait? Pour le rendre plus utile qu'il ne l'est maintenant, vous pouvez ajouter un peu de log4net de journalisation qui serait probablement également vous aider à identifier les enjeux pour l'avenir.Je pense qu'il y a un bug lors du traitement des données sur MyAccountController de CustomerRegistration action. Je préfère que vous vérifiez votre contrôleur si il y a une erreur qui se produit tout en faisant ses progrès.
Si vous avez la DLL standard (backend) et de Script Web (frontend: comme ashx ou aspx, etc.) le programme d'installation, puis il est facile d'oublier à télécharger (sur le serveur) une modification apportée à l'Script Web.
J'ai reçu un message d'erreur comme ceci, cependant il a disparu lorsque j'ai fait en sorte que l'ensemble de mon code/script de synchro et téléchargé sur le serveur.