我在一台服务器上用C#编写了WebApi,在另一台尝试使用JQuery发送DELETE请求的服务器上有一个网页:
<script>
$(function () {
$("#Save").click(function () {
$.ajax({
type: "DELETE",
url: "https://chad-test4.clas.uconn.edu/api/Employees/1",
dataType: "json",
success: function (data) {
console.log("Response recieved");
console.log("Success: " + JSON.stringify(data));
},
error: function() {
console.log("Failed")
}
// data: {"id": 1 }
});
});
});
</script>
这是我的控制者:
// DELETE: api/Employees/5
//[ResponseType(typeof(JsonObjectContract))]
public HttpResponseMessage Deleteemployee(int id)
{
employee employee = db.employees.Find(id);
var jsonid = employee.id;
if (jsonid == null)
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Error: Employee does not exist.");
}
db.employees.Remove(employee);
db.SaveChanges();
var Success = this.Request.CreateResponse(HttpStatusCode.OK, "Success");
Success.Content = new StringContent("{ Success: Success }", Encoding.UTF8, "application/json");
return Success;
}
我在控制台收到的响应是:
XMLHttpRequest cannot load https://chad-test4.clas.uconn.edu/api/Employees/1.
Invalid HTTP status code 405
create.htm:41 Failed
在对该主题进行研究后,我将Web.Config标题更改为建议的文本:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
<remove name="FormsAuthentication" />
</modules>
<httpProtocol>
<customHeaders>
<clear />
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
</customHeaders>
</httpProtocol>
我仍然得到同样的回应。任何建议表示赞赏
答案 0 :(得分:0)
HTTP 405状态代码不是“错误请求”,而是“不允许方法”。
在WebApiConfig.cs文件中,为控制器配置的路由应指定控制器在action属性中接受的HTTP谓词。确保您的javascript中的类型:设置为路径操作中匹配的HTTP谓词。
您在控制器中的方法可能还应该有一个描述其服务的动词的属性,例如: [HttpPost]或[HttpDelete]。
例如,这是我有一个小Api的路由配置......
public static class WebApiConfig
{
/// <summary>
/// Registers the WebAPI routes.
/// </summary>
/// <param name="config">The configuration.</param>
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "SOAInboundApi",
routeTemplate: "api/{controller}",
defaults: new { controller = "SOAInbound", action = "Post", id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "LogFileApi",
routeTemplate: "api/{controller}",
defaults: new { controller = "LogFile", action = "Get", id = RouteParameter.Optional }
);
}
}
我有一个Default,它只是提供一个静态视图,解释如何使用我的Api,一个接受HTTP Post的SOAInbound,以及一个接受HTTP Get的LogFile。
答案 1 :(得分:-1)
405代码它与“HTPP错误请求”有关,这是REST API的错误,不,jQuery。
我建议这个提示解决方案:https://praneeth4victory.wordpress.com/2011/09/29/405-method-not-allowed/
我建议你将问题转移到C#标签。