AngularJS 与 Asp.net Web API:$http post 返回 XMLHttpRequest 无法加载:预检响应具有无效的 HTTP 状态代

作者:编程家 分类: angularjs 时间:2025-08-04

使用 AngularJS 和 Asp.net Web API 进行开发是一种常见的组合,可以帮助我们构建强大的网络应用程序。在使用这两个框架时,我们可能会遇到一些常见的问题和错误。其中一个常见的错误是在使用 $http post 方法时,返回 XMLHttpRequest 无法加载的预检响应具有无效的 HTTP 状态代码 405 错误。本文将探讨这个问题,并提供一些解决方案。

在使用 AngularJS 的 $http post 方法与 Asp.net Web API 进行通信时,我们经常会遇到服务器返回 "XMLHttpRequest 无法加载" 的错误消息。这个错误消息通常伴随着一个无效的 HTTP 状态代码 405。这是因为在发送请求之前,浏览器会发送一个预检请求(OPTIONS 请求),用于确定服务器是否允许发送真正的请求。如果服务器没有正确配置来处理这个预检请求,就会导致这个错误的发生。

解决方案

要解决这个问题,我们需要在服务器端正确配置来处理预检请求。在 Asp.net Web API 中,我们可以通过添加一个名为 "OPTIONS" 的方法来处理预检请求。下面是一个示例代码:

csharp

public HttpResponseMessage Options()

{

var response = new HttpResponseMessage(HttpStatusCode.OK);

response.Headers.Add("Access-Control-Allow-Origin", "*");

response.Headers.Add("Access-Control-Allow-Headers", "Content-Type");

response.Headers.Add("Access-Control-Allow-Methods", "POST");

return response;

}

在上面的代码中,我们创建了一个名为 "Options" 的方法,并在方法中设置了允许的来源、允许的请求头和允许的请求方法。通过这样的配置,我们告诉浏览器允许发送真正的请求。

问题分析

为了更好地理解这个错误的原因,让我们来分析一下发生了什么。当我们使用 $http post 方法发送请求时,浏览器会先发送一个 OPTIONS 请求到服务器。服务器需要正确地处理这个 OPTIONS 请求,并返回允许的请求方法、请求头和来源。如果服务器没有正确配置来处理这个预检请求,浏览器就会报错,并显示 "XMLHttpRequest 无法加载" 错误消息。

解决方案示例

让我们来看一个具体的示例来解决这个问题。假设我们有一个 AngularJS 控制器,它使用 $http post 方法来向服务器发送请求:

javascript

app.controller('MyController', function($scope, $http) {

$scope.sendData = function() {

var data = {

name: 'John',

age: 25

};

$http.post('http://example.com/api/data', data)

.then(function(response) {

// 处理成功响应

}, function(error) {

// 处理错误

});

};

});

在上面的代码中,我们使用 $http post 方法向服务器发送一个名为 "data" 的对象。假设我们的服务器是使用 Asp.net Web API 构建的,我们可以使用上面提到的解决方案来配置服务器来处理 OPTIONS 请求。

在使用 AngularJS 和 Asp.net Web API 进行开发时,我们可能会遇到 $http post 返回 XMLHttpRequest 无法加载的预检响应具有无效的 HTTP 状态代码 405 错误。这个错误通常是因为服务器没有正确配置来处理预检请求导致的。通过在服务器端添加一个 OPTIONS 方法,并正确配置允许的请求方法、请求头和来源,我们可以解决这个问题。希望本文对解决这个常见错误有所帮助,并提高你在使用 AngularJS 和 Asp.net Web API 进行开发时的效率。