2016-07-25 10 views
1

AngularJSをフロントエンドとして、.NET Web APIをバックエンドとして使用する単一ページアプリケーション(SPA)を使用しています。私の開発マシン、つまりVisual Studio(2015)からlocalhostで実行すると、すべてがうまく動作します。しかし、私たちのテストサーバーに公開されると、POST要求をWeb APIに送信するときに "400 Bad Request"エラーが発生します。 GETリクエストは正常に動作します。私はFiddlerでデバッグしています.TextViewタブを見ると、「基になるプロバイダは開けませんでした」と書かれています。ここではいくつかのスクリーンショットは、フィドラーから、次のとおりです。テストサーバーに展開するときにPOSTリクエストでASP.NET Web API "400 Bad Request"が発生する

これは、要求と応答が私のローカルマシン上でどのように見えるかです:

Loaclhost response headers

がこれはテストサーバー上のレスポンスヘッダ:

Test server response headers

テストサーバーのTextView:

Test server response text view

POSTリクエストによって送信されるデータは、ローカルホストとテストサーバーの両方で同じです。また、両方とも認可ヘッダーが存在します。 "Referer"と "Host"の値以外の点は、テストサーバーがIIS/8.0上にある間にlocalhostがIIS/10.0上で動作していることです。

WebAPIのを呼び出すAngularJSリソースのためのコードは以下の通りです:

vm.generate = function() { 
     incidentResource.generateFile.generate(vm.divisionImports, 
      function (data) { 
       vm.successMessage.show = true; 
      }, 

      function (response) { 
       vm.message = response.statusText + "\r\n"; 
       if (response.data.exceptionMessage) { 
        vm.message += response.data.exceptionMessage; 
       } 
      }); 
    } 

をそして最後に、私のウェブAPIコントローラは次のようになります。

(function() { 
"use strict"; 

angular 
    .module("mainApp") 
    .factory("incidentResource", ["$resource", "baseApiUrl", incidentResource]); 

/// The factory function. The Angular $resource service and the appSettings 
/// constant are injected as parameters. 
function incidentResource($resource, baseApiUrl) { 

    return { 

     generateFile: $resource(baseApiUrl + "/api/Imports/PreviewOverlay", null, 
     { 
      'generate': { method: 'POST' } 
     }) 

    }; 
} 

})(); 

これはそうのような角度コードから呼び出されますこれは:

[RoutePrefix("api/Imports")] 
public class ImportController : BaseController 
{ 
    [Authorize] 
    [HttpPost] 
    [Route("PreviewOverlay")] 
    public IHttpActionResult GenerateFile(DivisionImport[] chargedIncidents) 
    { 
     try 
     { 
      // Get the name of the user currently logged in 
      string UserName = this.GetCurrentUserIdFromRequest(); 

      List<DivisionImport> incidentsList = new List<DivisionImport>(); 

      incidentsList.AddRange(chargedIncidents); 

      this.incidentFileBuilder.GenerateFile(FileType.Delimited, incidentsList); 

      return this.Ok(); 
     } 
     catch (Exception ex) 
     { 
      return this.BadRequest(ex.Message); 
     } 
    } 
} 

[EnableCors(origins: "*", headers: "*", methods: "*")] 
public class BaseController : ApiController 
{ 
} 

このエラーの原因は何ですか?

+2

"データベースの例外のように"元のプロバイダがオープンできませんでした "というメッセージが表示されましたが、データベース接続文字列が正しいかどうかを確認しましたか?またはテストサーバーで認証が正しいかどうかを確認します。 – Dan

+0

はい、あなたは正しいです!データベース接続文字列の問題でした。私は解決策としてそれを受け入れることができるように答えを投稿してください。 – lukegf

答えて

2

@Dan Julが指摘したように、エラーはデータベース接続文字列の誤りが原因です。私のコードを私たちのテストサーバーに配備している間に、(テストサーバーのために)接続構成ファイルを別のものに変更し、構文エラーのある接続文字列を含んでいました。

現在作業中です。

関連する問題