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"が発生する
これは、要求と応答が私のローカルマシン上でどのように見えるかです:
がこれはテストサーバー上のレスポンスヘッダ:
テストサーバーのTextView:
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
{
}
このエラーの原因は何ですか?
"データベースの例外のように"元のプロバイダがオープンできませんでした "というメッセージが表示されましたが、データベース接続文字列が正しいかどうかを確認しましたか?またはテストサーバーで認証が正しいかどうかを確認します。 – Dan
はい、あなたは正しいです!データベース接続文字列の問題でした。私は解決策としてそれを受け入れることができるように答えを投稿してください。 – lukegf