2015-06-24 69 views
2

我有C#編寫的一臺服務器,並且嘗試使用jQuery來發送一個DELETE請求其他服務器上的網頁上的WebAPI:JQuery的DELETE請求到C#API - > HTTP狀態碼405

<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 

在上面做研究後IC,我改變了我的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

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 } 
     ); 
    } 
} 

我有一個默認的,剛剛提出瞭解釋如何使用自己的API,一個SOAInbound靜態視圖它接受HTTP Post,以及接受HTTP Get的LogFile。

+0

所以在這裏?:config.Routes.MapHttpRoute( name:「DefaultApi」, routeTemplate:「api/{controller}/{id}」, 默認值:new {id = RouteParameter.Optional} );我不確定要在這裏做什麼改變 – Christian

+0

將操作屬性添加到新的例如new = {controler =「NameOfYourControler」,action =「Delete」,id = RouteParameter.Optional} – Kevin

+0

然後我需要將我的控制器從HttpResponseMessage更改爲ActionResult? – Christian

相關問題