【问题标题】:C# The requested resource does not support http method patchC#请求的资源不支持http方法补丁
【发布时间】:2017-09-05 16:52:52
【问题描述】:

我正在使用我的控制器的 PATCH 方法,但我不断收到错误

请求的资源不支持http方法补丁

RouteConfig.cs

// GET http://localhost:28888/v1/panels/
// PATCH http://localhost:28888/v1/panels/1

routes.MapHttpRoute(
    name: "Panel",
    routeTemplate: "v1/panels/{id}",
    defaults: new { controller = "Panel",
        id = RouteParameter.Optional,
    },
    constraints: null,
    handler: handler
);

PanelController.cs

[HttpPatch]
public HttpResponseMessage Patch(int panelId)
{
    if (panelId <= 0)
    {
        throw new ArgumentNullException(nameof(panelId), "Can't be less or equal 0.");
    }

    panelTasks.SetPanelModified(panelId);

    return Request.CreateResponse(HttpStatusCode.NoContent);
}

实际上允许使用 Patch 方法。在 Global.asax 中是下面的代码行

Context.Response.AddHeader("Access-Control-Allow-Methods", "GET,POST,PUT,PATCH,DELETE,OPTIONS");
Context.Response.AddHeader("Access-Control-Allow-Credentials", "true");

我正在测试 Postman 的网址。网址是localhost:28888/v1/panels/2902901

【问题讨论】:

  • 您使用的是哪个版本的 WebApi?您使用的是旧版 .net 还是 .net 核心?
  • 旧版 .net。仍在使用 System.Web
  • 如果你想让它自动正确映射你的路由,参数名称需要匹配。它不会自动将id 映射到panelId
  • @stephen.vakil 就是这样!

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


【解决方案1】:

@stephen.vakil

如果您希望它自动正确地映射您的路线, 参数名称需要匹配。它不会自动将id 映射到 panelId

【讨论】:

    【解决方案2】:

    你在使用 IIS 吗?如果是这样,请尝试删除 WebDav 地图:

    1. 打开 IIS 并转到相关站点。
    2. 点击“处理程序映射”
    3. 找到名为“WebDAV”的处理程序
    4. 删除它

    【讨论】:

      【解决方案3】:

      web api 端的web.config 在httpProtocol 部分配置允许的方法,

      <add name="Access-Control-Allow-Methods" value="GET,HEAD,PUT,PATCH,POST,DELETE" />
      

      是否存在一些冲突(与代码中的设置)或缺少设置?

      【讨论】:

        猜你喜欢
        • 2017-10-17
        • 2018-06-24
        • 2013-03-19
        • 2014-08-12
        • 2012-09-27
        • 2014-01-28
        • 2016-07-17
        • 2017-06-13
        相关资源
        最近更新 更多