2014-09-04 69 views
0

我正在開發一個帶有最新.NET Framework和C#的Web Api 2服務。在同一個控制器上,GET和POST可以工作,但PUT不需要

我有這些方法的控制器:

public IEnumerable<User> Get() 
{ 
    // ... 
} 

public User Get(int id) 
{ 
    // ... 
} 

public HttpResponseMessage Post(HttpRequestMessage request, User user) 
{ 
    // ... 
} 

public void Put(int userId, User user) 
{ 
    // ... 
} 

這是WebApiConfig類:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 
} 

當我嘗試做api/Users/4一個PUT我得到一個錯誤,告訴我,這只是允許GET。這是我做Put時的迴應:

HTTP/1.1 405 Method Not Allowed 
Cache-Control: no-cache 
Pragma: no-cache 
Allow: GET 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcVWljMTguSUNcU291cmNlc1xSZXBvc1xWaWEgQ29nbml0YVxNYXR0XHNyY1xNYXR0LlNvY2lhbE5ldHdvcmsuV2ViLkFwaVxhcGlcVXNlcnNcMQ==?= 
X-Powered-By: ASP.NET 
Date: Thu, 04 Sep 2014 10:04:26 GMT 
Content-Length: 68 

{"Message":"The requested resource does not support the method http 'PUT'."} 

你知道我爲什麼得到這個錯誤嗎?

+0

_「一個錯誤告訴我,它只允許GET」_ - 顯示** actual **錯誤。或者說,研究它。 – CodeCaster 2014-09-04 08:58:44

+0

我已更新我的問題。 – VansFannel 2014-09-04 10:10:51

+0

您是否將PUT動詞映射到IIS/Web.config中的ExtensionlessUrlHandler(它應該在那裏默認情況下我認爲,但檢查很好)。 – 2014-09-04 11:57:50

回答

2

這是因爲您的操作定義爲採用參數名稱爲userId的用戶標識,但您的路由設置爲使用{id}。它應該是:

public void Put(int id, User user) 
{ 
    // ... 
} 
+1

我從未在一百萬年內認爲這是問題所在。 – VansFannel 2014-09-04 13:08:46

+0

容易被忽略;) – 2014-09-04 13:23:30

相關問題