【问题标题】:ASP.NET Web API "400 Bad Request" on POST Request When Deploying to Test Server部署到测试服务器时 POST 请求上的 ASP.NET Web API “400 Bad Request”
【发布时间】: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
{
}

什么可能导致这个错误?

【问题讨论】:

  • 提示“底层提供者打开失败”听起来像是数据库异常,你检查过数据库连接字符串是否正确吗?或者测试服务器中的身份验证是否正确?
  • 是的,你是对的!这是一个数据库连接字符串问题。发布答案,以便我接受它作为解决方案。
  • 我对@9​​87654330@有同样的错误

标签: c# angularjs asp.net-web-api bad-request


【解决方案1】:

正如@Dan Jul 指出的,错误是由错误的数据库连接字符串引起的。在将我的代码部署到我们的测试服务器时,我们将连接配置文件更改为另一个(用于测试服务器),它包含一个带有语法错误的连接字符串。

现在一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2020-03-19
    相关资源
    最近更新 更多