我一直试图让删除工作,似乎无法让它工作!
所有GET请求似乎都很好,但如果我尝试使用删除动词,我会收到上述错误。
如果我将它设为GET,方法本身是可以访问的,但是只要我添加[HttpDelete]属性并尝试设置调用类型就失败了。
方法:
[HttpDelete]
public void Delete(int id) {
// delete method.
}
呼叫:
remove: function(key) {
$.ajax({
url: MyApp.settings.endpoint + 'list/delete/1,
type: "DELETE"
});
}
它似乎挂在了OPTIONS预请求上?
请求:
(Request-Line) OPTIONS /api/list/delete/1 HTTP/1.1
Host 192.168.1.139
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0
Accept text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language en-US,en;q=0.5
Accept-Encoding gzip, deflate
Origin null
Access-Control-Request-Method DELETE
响应:
(Status-Line) HTTP/1.1 405 Method Not Allowed
Cache-Control no-cache
Pragma no-cache
Allow DELETE
Content-Type application/xml; charset=utf-8
Expires -1
Server Microsoft-IIS/7.5
X-AspNet-Version 4.0.30319
Access-Control-Allow-Origin *
Date Mon, 05 May 2014 02:54:38 GMT
Content-Length 96
我已经尝试过几乎所有可想象的web.config,你可以删除WebDAV和WebDAVModule并使用ExtensionlessUrlHandler。
唯一的区别是我也包括这个以允许跨域。我真的希望这不会那么难。
<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
答案 0 :(得分:2)
看起来您正在使用跨域调用,您是否为项目添加了CORS支持?
请注意,下面的代码是一个很大的问题,您可以选择性地启用每个控制器。 有关详情,请参阅以下链接:http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
using System.Web.Http;
namespace WebService
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// New code
var cors = new EnableCorsAttribute("www.example.com", "*", "*");
config.EnableCors(cors);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
答案 1 :(得分:0)
请在Startup.cs中启用跨域资源共享(CORS)
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder => builder.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});