2017-03-06 19 views
0

私は私のAzure REST APIのアプリにポストを実行しようとするとき、私は次のエラーを取得する:REST API Azureのエラー:「Microsoft.Rest.HttpOperationException」操作は「を作成」は無効なステータスコードを返し

Exception: Exception caught: 'Microsoft.Rest.HttpOperationException' in Program.exe ("Operation returned an invalid status code 'Created'"). Exception caught: 'Microsoft.Rest.HttpOperationException' in Program.exe ("Operation returned an invalid status code 'Created'") 13,495.67s [7568] Worker Thread

それはAPIアプリに正しく投稿され(APIアプリが話すDBに情報を配置します)、何らかの理由で戻りコードが正しく処理されないように見えます。私のソリューションにREST APIクライアントを追加したとき、このポスト機能は自動的に生成されました。回避策については、try/catchでネストしましたが、本当にこの問題を解決したいので、デバッグが正当なものであることを示す例外があります。

+0

Azureでは[リモートデバッグ]も可能です(https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-dotnet-troubleshoot-visual-studio#a-nameremotedebugaremote -debugging-web-apps)にVistual Studioをインストールします。 execpitonに合流する私は、Rest APIにロジックに何か問題があると思われます。 リモートデバッグをお試しください。それも解決されない場合は、可能であればAPIコードを共有してください。また、詳細については、http要求をキャッチするためにfiddlerを使用することもできます。 –

+0

@ TomSun-MSFT Rest.HttpOperationがよくわからないステータスコードを返しています。このステータスコードはどこかで定義されていますか? APIアプリケーションですべての機能が正常に動作している場合、どのようにリモートデバッグを使用できますか? 201コードが返され、APIアプリケーションを使用してDBに正常に作成されますが、そのコードはMicrosoft.Rest.HttpOperationで処理されません。 –

答えて

0

Microsoft.Rest.ClientRuntime.AzureソースコードCheckResponseStatusCodeFailed機能によると、我々はhttpStatusCode.Created & &方法場合== HttpMethod.Putその後、CheckResponseStatusCodeFaild関数はfalseを返すことを知っているかもしれません。しかし、あなたの条件では、httpStatusCode.Created & &メソッド== HttpMethod.Postの場合、CheckResponseStatusCodeFailedはtrueになります。その後、例外がスローされます。私のオプションで

private static bool CheckResponseStatusCodeFailed<TBody, THeader>(
      AzureOperationResponse<TBody, THeader> initialResponse) 
     { 
      var statusCode = initialResponse.Response.StatusCode; 
      var method = initialResponse.Request.Method; 
      if (statusCode == HttpStatusCode.OK || statusCode == HttpStatusCode.Accepted || 
       (statusCode == HttpStatusCode.Created && method == HttpMethod.Put) || 
       (statusCode == HttpStatusCode.NoContent && (method == HttpMethod.Delete || method == HttpMethod.Post))) 
      { 
       return false; 
      } 
      return true; 
    } 

HttpMethod.Post HttpMethod.Put にを変更したり、SwaggerResponseを追加しようが、あなたは有効なHTTP応答コードを指定するWeb APIのアクションメソッドへ[SwaggerResponse(HttpStatusCode.OK)]属性持ちください。 SwaggerResponse属性の詳細については、customize expected response codes using the SwaggerResponse attributeを参照してください。

+0

スワッガーレスポンスアトリビュートでした!おかげでトム! –

+0

便利な場合は、それに印を付けてください。 –

関連する問題