【发布时间】:2015-09-02 13:25:02
【问题描述】:
我有一个使用 MVC 和 AngularJS 的 Web 应用程序,它连接到我在单独项目中设置的 Web API 2 api。
目前我可以毫无问题地从 Api 检索信息。
但是,当我尝试执行 HTTP Post 时,我没有得到任何响应,最初我遇到了飞行前请求失败的问题,我现在已经在我的控制器中处理了这个问题,但是之后它没有发送正确的请求它收到了一条 OK 消息。
我已经在 API 中包含了我的 Angular Factory 和 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 中进行了测试,它完全没有问题。
我通过禁用 web 安全性开始使其在 chrome 中运行,但显然这并不理想,因为它无法在启用安全性的用户 PC 上运行。
【问题讨论】:
-
在 Firefox 中可以使用吗?
-
是的,我认为这与 Chrome 的安全性有关。
-
您是否尝试过发布到域,例如web.domain.com 和 api.domain.com 看看它们在同一个域上是否有效?
-
是的,同样的问题仍然存在。
-
@BenSharpe 在我看来,您不需要 API 控制器中的 Options 方法。如果为跨域启用了 cors,则 OPTIONS 请求将在主请求(在您的情况下为 POST)之前自动发送,以获得服务器的“批准”。
标签: c# asp.net-mvc angularjs asp.net-web-api2