JQuery DELETE请求C#API - > HTTP状态代码405

时间:2015-06-24 15:22:41

标签: c# asp.net-web-api

我在一台服务器上用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>

我仍然得到同样的回应。任何建议表示赞赏

2 个答案:

答案 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#标签。