我正在对这样的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 }
);
提前致谢。
答案 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
一起使用。