在同一个控制器上,GET和POST可以工作,但PUT不起作用;t

本文关键字:PUT 工作 不起作用 POST 控制器 同一个 GET | 更新日期: 2023-09-27 18:20:32

我正在使用最新的.NET Framework和C#开发Web Api 2服务。

我有一个控制器与这些方法:

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'."}

你知道我为什么会犯这个错误吗?

在同一个控制器上,GET和POST可以工作,但PUT不起作用;t

这是因为您的操作被定义为使用参数名为userId的用户id,但您的路由被设置为使用{id}。它应该是:

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