HTTP Post 到 Web API 2 - 选项请求已收到并已处理未收到进一步的请求
HTTP Post to Web API 2 - Options request received and handled no further request received
我有一个使用 MVC 和 AngularJS 的 Web 应用程序,它连接到我在单独项目中设置的 Web API 2 api。
目前我可以毫无问题地从 Api 检索信息。
然而,当我尝试执行 HTTP Post 时,我没有收到任何响应,最初我遇到了飞行前请求失败的问题,我现在已经在我的控制器中处理了这个问题,但是它确实如此在收到 OK 消息后没有发送正确的请求。
我在 API 中包含了 Angular 工厂和 C# 控制器的代码。
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class RegisterController : ApiController
{
public string Post()
{
return "success";
}
public HttpResponseMessage Options()
{
return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
}
}
var RegistrationFactory = function($http, $q, ApiAddress) {
return function(model) {
// $http.post(ApiAddress.getApiAddress() + '/Register/Post', model.ToString());
$http({
method: "POST",
url: ApiAddress.getApiAddress() + '/Register/Post',
data: model,
headers: { 'Content-Type': 'application/json; charset=utf-8' }
}).success(function(data) {
$location.path("/");
});
}
};
RegistrationFactory.$inject = ['$http', '$q', 'ApiAddress'];
编辑:
我对此仍然不满意,但是我在 Internet Explorer 中进行了测试,它完全没有问题。
我在 chrome 中通过禁用 Web 安全启动使其正常工作,但显然这并不理想,因为它无法在启用安全的用户 PC 上运行。
我看到你们在服务端做了CORS的适配。但我看不到任何客户端 (javascript) 改编。也许你应该在调用服务之前添加下面的代码。
$http.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
让我知道这是否解决了问题。在所有情况下都为我工作:)
奇怪的是,您的 GET 有效,但您的 POST 无效。
我会推荐 运行将 Google Chrome 中的代码与网络安全 启用 结合使用(这样我们就可以看到它出错了)并显示 F12 开发人员选项。
Select“网络”选项卡,运行 您的代码,然后观察调用 POST 时发生的情况。
您的服务 return 是“200 OK”状态还是其他值?
是否有任何类型的响应得到 returned?
可能值得尝试一下,并在您的原始问题中附上结果的屏幕截图。它可能有助于确定原因。
I am still not having any joy with this, however I tested in Internet
Explorer and it works with no problems at all.
顺便说一句,您的公司没有任何单点登录设置,是吗?我们遇到过 IE 可以正常工作,但其他浏览器不允许单点登录的问题。只是一个想法...
CORS 需要 OPTIONS-preflight,其响应中包含 HTTP headers,告诉浏览器是否允许访问资源。
例如HTTP 响应 Headers:
Access-Control-Allow-Headers: authorization
Access-Control-Allow-Origin: *
因为您的 C# 控制器中有一个自定义选项处理程序,所以似乎没有返回那些 HTTP headers,预检后停止浏览器进行调用。
避免选项方法,你应该很好。
我有一个使用 MVC 和 AngularJS 的 Web 应用程序,它连接到我在单独项目中设置的 Web API 2 api。
目前我可以毫无问题地从 Api 检索信息。
然而,当我尝试执行 HTTP Post 时,我没有收到任何响应,最初我遇到了飞行前请求失败的问题,我现在已经在我的控制器中处理了这个问题,但是它确实如此在收到 OK 消息后没有发送正确的请求。
我在 API 中包含了 Angular 工厂和 C# 控制器的代码。
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class RegisterController : ApiController
{
public string Post()
{
return "success";
}
public HttpResponseMessage Options()
{
return new HttpResponseMessage { StatusCode = HttpStatusCode.OK };
}
}
var RegistrationFactory = function($http, $q, ApiAddress) {
return function(model) {
// $http.post(ApiAddress.getApiAddress() + '/Register/Post', model.ToString());
$http({
method: "POST",
url: ApiAddress.getApiAddress() + '/Register/Post',
data: model,
headers: { 'Content-Type': 'application/json; charset=utf-8' }
}).success(function(data) {
$location.path("/");
});
}
};
RegistrationFactory.$inject = ['$http', '$q', 'ApiAddress'];
编辑:
我对此仍然不满意,但是我在 Internet Explorer 中进行了测试,它完全没有问题。
我在 chrome 中通过禁用 Web 安全启动使其正常工作,但显然这并不理想,因为它无法在启用安全的用户 PC 上运行。
我看到你们在服务端做了CORS的适配。但我看不到任何客户端 (javascript) 改编。也许你应该在调用服务之前添加下面的代码。
$http.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
让我知道这是否解决了问题。在所有情况下都为我工作:)
奇怪的是,您的 GET 有效,但您的 POST 无效。
我会推荐 运行将 Google Chrome 中的代码与网络安全 启用 结合使用(这样我们就可以看到它出错了)并显示 F12 开发人员选项。
Select“网络”选项卡,运行 您的代码,然后观察调用 POST 时发生的情况。
您的服务 return 是“200 OK”状态还是其他值?
是否有任何类型的响应得到 returned?
可能值得尝试一下,并在您的原始问题中附上结果的屏幕截图。它可能有助于确定原因。
I am still not having any joy with this, however I tested in Internet Explorer and it works with no problems at all.
顺便说一句,您的公司没有任何单点登录设置,是吗?我们遇到过 IE 可以正常工作,但其他浏览器不允许单点登录的问题。只是一个想法...
CORS 需要 OPTIONS-preflight,其响应中包含 HTTP headers,告诉浏览器是否允许访问资源。
例如HTTP 响应 Headers:
Access-Control-Allow-Headers: authorization
Access-Control-Allow-Origin: *
因为您的 C# 控制器中有一个自定义选项处理程序,所以似乎没有返回那些 HTTP headers,预检后停止浏览器进行调用。
避免选项方法,你应该很好。