我怎样才能像对待 PATCH 路由一样对待我的 HTTP PUT 路由?
How can I have my HTTP PUT routes treated the same way as PATCH routes?
我有一个 ASP.NET Core web API 控制器基础 class 可以缩短为以下内容:
[Route("my/route")]
public abstract class ControllerBase
{
[HttpPut]
[Route("")]
public MyObject Update([FromBody] MyObject obj) => obj;
[HttpPut]
[Route("{*id}", Order = 1)]
public MyObject Update([FromUri] String id, [FromBody] MyObject obj) => obj;
[HttpPatch]
[Route("")]
public MyObject Patch([FromBody] JObject data) => new MyObject();
[HttpPatch]
[Route("{*id}", Order = 1)]
public MyObject Patch([FromUri] String id, [FromBody] JObject data) => new MyObject();
}
现在,想象调用以下四个端点:
PUT /my/route
PUT /my/route/42
PATCH /my/route
PATCH /my/route/42
在 ASP.NET(使用 .NET Framework)中,所有四个过去都可以工作。
现在应用程序已切换到 .NET Core 并使用 ASP.NET Core,调用 1 和 2,即两个 HTTP PUT
调用,return 405/Method Not Allowed
. HTTP PATCH
调用仍然像以前一样工作。
似乎 ASP.NET Core 的路由行为与 ASP.NET 的路由行为有些不同,但为什么它对一种 HTTP 方法的行为方式相同而对另一种方法的行为方式不同?
经过一些挖掘,我找到了 的答案,其中建议在 ASP.NET Core 中,查询字符串参数也需要添加到方法属性中。因此,我尝试如下更改 PUT
方法,但无济于事:
[HttpPut("")]
[Route("")]
public MyObject Update([FromBody] MyObject obj) => obj;
[HttpPut("{*id}", Order = 1]
[Route("{*id}", Order = 1)]
public MyObject Update([FromUri] String id, [FromBody] MyObject obj) => obj;
我需要做什么才能使 PUT
端点再次工作,就像 PATCH
端点仍然一样?
问题出在 IIS 中的 WebDAV 模块。
我使用 Windows 的 Add/Remove 功能将其从我的系统中完全删除,完成后,HTTP PUT
调用将按预期再次工作。
我有一个 ASP.NET Core web API 控制器基础 class 可以缩短为以下内容:
[Route("my/route")]
public abstract class ControllerBase
{
[HttpPut]
[Route("")]
public MyObject Update([FromBody] MyObject obj) => obj;
[HttpPut]
[Route("{*id}", Order = 1)]
public MyObject Update([FromUri] String id, [FromBody] MyObject obj) => obj;
[HttpPatch]
[Route("")]
public MyObject Patch([FromBody] JObject data) => new MyObject();
[HttpPatch]
[Route("{*id}", Order = 1)]
public MyObject Patch([FromUri] String id, [FromBody] JObject data) => new MyObject();
}
现在,想象调用以下四个端点:
PUT /my/route
PUT /my/route/42
PATCH /my/route
PATCH /my/route/42
在 ASP.NET(使用 .NET Framework)中,所有四个过去都可以工作。
现在应用程序已切换到 .NET Core 并使用 ASP.NET Core,调用 1 和 2,即两个 HTTP PUT
调用,return 405/Method Not Allowed
. HTTP PATCH
调用仍然像以前一样工作。
似乎 ASP.NET Core 的路由行为与 ASP.NET 的路由行为有些不同,但为什么它对一种 HTTP 方法的行为方式相同而对另一种方法的行为方式不同?
经过一些挖掘,我找到了 PUT
方法,但无济于事:
[HttpPut("")]
[Route("")]
public MyObject Update([FromBody] MyObject obj) => obj;
[HttpPut("{*id}", Order = 1]
[Route("{*id}", Order = 1)]
public MyObject Update([FromUri] String id, [FromBody] MyObject obj) => obj;
我需要做什么才能使 PUT
端点再次工作,就像 PATCH
端点仍然一样?
问题出在 IIS 中的 WebDAV 模块。
我使用 Windows 的 Add/Remove 功能将其从我的系统中完全删除,完成后,HTTP PUT
调用将按预期再次工作。