【发布时间】:2016-11-28 23:57:21
【问题描述】:
我有一个单页应用程序 (SPA),其中 AngularJS 作为我的前端,.NET Web API 作为我的后端。在我的开发机器上一切正常,即当我从 localhost 下的 Visual Studio (2015) 运行它时。但是,一旦发布到我们的测试服务器,当向 Web API 发送 POST 请求时,我会收到“400 Bad Request”错误。 GET 请求工作正常。我正在使用 Fiddler 对其进行调试,当我查看 TextView 选项卡时,它显示“底层提供程序无法打开”。以下是 Fiddler 的一些截图:
这是请求和响应在我的本地机器上的样子:
这是测试服务器上的响应头:
以及测试服务器上的TextView:
通过 POST 请求发送的数据对于本地主机和测试服务器都是相同的。此外,对于它们两者,都存在授权标头。除了“Referer”和“Host”的值之外,我注意到它们之间的唯一区别是 localhost 在 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
{
}
什么可能导致这个错误?
【问题讨论】:
-
提示“底层提供者打开失败”听起来像是数据库异常,你检查过数据库连接字符串是否正确吗?或者测试服务器中的身份验证是否正确?
-
是的,你是对的!这是一个数据库连接字符串问题。发布答案,以便我接受它作为解决方案。
-
我对@987654330@有同样的错误
标签: c# angularjs asp.net-web-api bad-request