Web APi MVC4中的内部服务器错误500

时间:2013-08-16 09:52:20

标签: asp.net-mvc-4 asp.net-web-api

我从控制器调用了一个HttpPost方法到Web API。对于其他方法,响应是正常的,除了下面提到的说明错误的方法

之外,该方法运行良好
{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
}}

我的方法

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; }
            }

我怎样才能确定代码中的错误在哪里?有什么建议??

编辑:: 跟踪指定“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
}}

任何修复建议。?

EDIT1:

</Message><ExceptionMessage>No MediaTypeFormatter is available to read an object of type 'CustomerRequestResponse' from content with media type 'text/plain'.</ExceptionMessage>

3 个答案:

答案 0 :(得分:2)

我要做的第一件事是验证客户端正在执行的请求是否正确 - 正确的URL,标题,正文。为此,您可以在应用程序中启用fiddler作为代理。将此部分添加到Web.config并尝试使用fiddler打开再次运行代码 - 现在您应该能够在fiddler中看到请求:

<system.net>
  <defaultProxy>
    <proxy  proxyaddress="http://127.0.0.1:8888" />      
  </defaultProxy>
</system.net>

如果请求正常,请检查您尝试连接的服务器是否已启动并正在运行,并且正在为您提供正确的响应和正确的标头。

我怀疑它应该足以识别问题。

BTW:在现实生活中你的catch块确实做了一些有用的事情吗?为了使它比现在更有用,你可以添加一些log4net日志记录,这可能也有助于识别任何未来的问题。

答案 1 :(得分:0)

我认为在MyAccountController的CustomerRegistration操作上处理数据时存在错误。如果在进行操作时发生错误,我希望您检查控制器。

答案 2 :(得分:0)

如果您具有标准DLL(后端)和Web脚本(前端:例如ashx或aspx等)设置,则很容易忘记上传(到服务器)对Web脚本所做的更改。 我收到了这样的错误,但是当我确保我的所有代码/脚本都是同步并上传到服务器时,它就消失了。