.netcore PUT 方法 405 方法不允许
.netcore PUT method 405 Method Not Allowed
我有一个简单的模型,因为它有 2 个字段并使用以下 put 方法,我想在数据库中更新它。包括 delete 在内的所有方法都有效,但是 put 方法总是 returns Postman 中的 405 错误。 (也尝试过 WebDAV 解决方案。)我在这里缺少什么?
放置方法:
{
"MasterId":1,
"MasterName":"Test"
}
动作
[HttpPut("{id:int}")]
public async Task<IActionResult> PutMaster(int id, Master master)
{
if (id != master.MasterId)
{
return BadRequest();
}
//...some code
return NoContent();
}
使用 [HttpPut("{id:int}")]
路由属性,您需要将 api 引用为:http://localhost:5000/api/masters/{id}
在你的例子中:
放置http://localhost:5000/api/masters/1
所以参数中的 id
也不需要:
[HttpPut("{id:int}")]
public async Task<IActionResult> PutMaster(Master master)
并且将 entity framework 对象公开给客户端是一种不好的做法,您应该使用 DTO class 并将其映射到 entity framework 对象。
首先观察到被调用的 URL
api/masters
不匹配控制器操作 [HttpPut("{id:int}")]
的路由模板,它将映射到 URL like
api/masters/{id:int}
调用与操作的路由模板匹配的正确 URL
PUT api/masters/1
错误本身是因为您很可能有另一个路由匹配提供的 URL 但不匹配 HTTP 动词。就像控制器操作之一的根[HttpGet]
。这解释了为什么您会收到 405 Method Not Allowed 错误而不是 404 Not Found 错误
你的方法应该是
[HttpPut("{id:int}")]
public async Task<IActionResult> PutMaster(int id,[FromBody] Master master)
{}
您需要在方法中添加[FromBody]
属性。
请求url应该是
PUT api/masters/1
如果您使用 IIS 来 运行 您的应用程序并且有 WebDav 模块,那可能是个问题。由于某些奇怪的原因,WebDav 不允许 PUT。
我刚刚卸载了它,它很有帮助。
如果您的应用程序托管在 运行 API ASP.NET 核心中的 IIS 下,请将此行包含在 Web.Config 文件中
<configuration>
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
</system.webServer>
</configuration>
我有一个简单的模型,因为它有 2 个字段并使用以下 put 方法,我想在数据库中更新它。包括 delete 在内的所有方法都有效,但是 put 方法总是 returns Postman 中的 405 错误。 (也尝试过 WebDAV 解决方案。)我在这里缺少什么?
放置方法:
{
"MasterId":1,
"MasterName":"Test"
}
动作
[HttpPut("{id:int}")]
public async Task<IActionResult> PutMaster(int id, Master master)
{
if (id != master.MasterId)
{
return BadRequest();
}
//...some code
return NoContent();
}
使用 [HttpPut("{id:int}")]
路由属性,您需要将 api 引用为:http://localhost:5000/api/masters/{id}
在你的例子中:
放置http://localhost:5000/api/masters/1
所以参数中的 id
也不需要:
[HttpPut("{id:int}")]
public async Task<IActionResult> PutMaster(Master master)
并且将 entity framework 对象公开给客户端是一种不好的做法,您应该使用 DTO class 并将其映射到 entity framework 对象。
首先观察到被调用的 URL
api/masters
不匹配控制器操作 [HttpPut("{id:int}")]
的路由模板,它将映射到 URL like
api/masters/{id:int}
调用与操作的路由模板匹配的正确 URL
PUT api/masters/1
错误本身是因为您很可能有另一个路由匹配提供的 URL 但不匹配 HTTP 动词。就像控制器操作之一的根[HttpGet]
。这解释了为什么您会收到 405 Method Not Allowed 错误而不是 404 Not Found 错误
你的方法应该是
[HttpPut("{id:int}")]
public async Task<IActionResult> PutMaster(int id,[FromBody] Master master)
{}
您需要在方法中添加[FromBody]
属性。
请求url应该是
PUT api/masters/1
如果您使用 IIS 来 运行 您的应用程序并且有 WebDav 模块,那可能是个问题。由于某些奇怪的原因,WebDav 不允许 PUT。
我刚刚卸载了它,它很有帮助。
如果您的应用程序托管在 运行 API ASP.NET 核心中的 IIS 下,请将此行包含在 Web.Config 文件中
<configuration>
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
</system.webServer>
</configuration>