$ http.delete在angularJS中抛出错误

时间:2015-03-23 10:22:36

标签: asp.net-mvc angularjs asp.net-web-api xmlhttprequest cors

我正在对这样的Delete方法进行api调用 -

$http.delete('http://localhost:45467/api/v1/proddetails/' + prodId, null )
    .success(function (data, status, headers, config) {
        if(data.status == "200")
        {
            console.log('data deleted');
        }
        deferred.resolve(data);
    })
    .error(function (data, status, headers, config) {
        console.log("some error occurred");
        deferred.reject(data);
    });

删除端点如下所示 -

[HttpDelete]
public HttpResponseMessage Delete(int productId)

当我运行此操作并查看Chrome控制台时,出现此错误 -

OPTIONS http://localhost:45467/api/v1/proddetails/34 
(index):1 XMLHttpRequest cannot load   
http://localhost:45467/api/v1/proddetails/34. No 'Access-Control-Allow-  
Origin' header is present on the requested resource. Origin 
'http://localhost:5100' is therefore not allowed access. The response had 
HTTP status code 405.

似乎无法弄清楚这里有什么问题。其他Get和Post请求工作正常。如何解决这个问题?

Note1 :我已经启用了CORS -

[EnableCors(origins: "*", headers: "*", methods: "*")]

Note2 :我正在使用interceptors为每个请求添加身份验证令牌。我不确定这是否会引起任何问题。

Note3:这就是我在asp.net webapiconfig文件中定义路由的方法 -

config.Routes.MapHttpRoute(
            name: "ProdApi",
            routeTemplate: "api/v1/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

提前致谢。

3 个答案:

答案 0 :(得分:2)

我终于弄明白了问题所在。其实这篇文章很有帮助 - PUT and Delete not working with ASP.NET WebAPI and Database on Windows Azure

我只需要将productId param替换为id - 这是webapiconfig配置中的。我不确定为什么会这样。理想情况下,我应该能够为参数添加任何名称,而不受我在路由中的限制。希望有人可以解释一下。

答案 1 :(得分:1)

$http.delete()更改为$http.del()

答案 2 :(得分:0)

您正在向您的网页所在的其他域发送HTTP请求。出于安全原因,浏览器阻止它。

No 'Access-Control-Allow-Origin' header is present on the requested resource.

This问题解释了如何使DELETE http请求与asp.net-web-api一起使用。