我有一个单页应用程序(SPA),前端是AngularJS,后端是.NET Web API。一切在我的开发机器上都可以正常工作,即当我在本地主机下的Visual Studio(2015)中运行它时。但是,一旦发布到我们的测试服务器,将POST请求发送到Web API时,我会收到“ 400 Bad Request”错误。GET请求工作正常。我正在用Fiddler调试它,当我在TextView选项卡中查看时,显示“底层提供程序无法打开”。这是Fiddler的一些屏幕截图:
这是请求和响应在我的本地计算机上的外观:
这是测试服务器上的响应头:
以及测试服务器上的TextView:
通过POST请求发送的数据对于localhost和测试服务器都是相同的。同样,对于它们两个,都存在一个授权标头。除了“ Referer”和“ Host”的值之外,我注意到它们之间的唯一其他区别是,本地主机在IIS / 10.0上运行,而测试服务器在IIS / 8.0上。
调用WebAPI的AngularJS资源的代码如下:
(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' }
})
};
}
})();
这是从Angular代码中调用的,如下所示:
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;
}
});
}
最后,我的Web API控制器如下所示:
[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 Jul指出的那样,该错误是由错误的数据库连接字符串引起的。在将代码部署到测试服务器时,我们将连接配置文件更改为另一个文件(用于测试服务器),并且其中包含带有语法错误的连接字符串。
现在一切正常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句