0

コントローラーから Web API に対して HttpPost メソッドを呼び出しました。他のメソッドについては、応答は OK であり、エラーを示す以下のメソッドを除いて、メソッドは正常に機能します。

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

コードのどこが間違っているかを特定するにはどうすればよいですか。助言がありますか ??

EDIT ::「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>
4

3 に答える 3

2

私が最初に行うことは、クライアントが行っているリクエストが正しいことを確認することです-正しいURL、ヘッダー、本文。fiddlerそのために、アプリケーションでプロキシとして有効にすることができます。このセクションをに追加Web.configし、フィドラーを開いた状態でコードを再度実行してみてください。これで、フィドラーでリクエストを確認できるはずです。

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

リクエストに問題がない場合は、接続しようとしているサーバーが実際に稼働しており、正しいヘッダーで正しい応答を返していることを確認してください。

問題を特定するにはそれで十分だと思います。

ところで: 実生活では、あなたのcatchブロックは実際に何か役に立つのですか? 現在よりも便利にするために、いくつかの log4net ロギングを追加できます。これは、おそらく将来の問題を特定するのにも役立ちます。

于 2013-08-16T18:48:25.807 に答える
0

MyAccountController の CustomerRegistration アクションでデータを処理中にバグがあると思います。進行中にエラーが発生した場合は、コントローラーを確認することをお勧めします。

于 2013-08-17T06:26:27.813 に答える
0

標準の DLL (バックエンド) と Web スクリプト (フロントエンド: ashx や aspx など) がセットアップされている場合、Web スクリプトに加えられた変更を (サーバーに) アップロードするのを忘れがちです。このようなエラーを受け取りましたが、すべてのコード/スクリプトが同期してサーバーにアップロードされていることを確認すると、エラーはなくなりました。

于 2016-08-25T06:43:32.003 に答える