我有一个简单的模型,因为它有2个字段,并使用以下put方法,因此我打算在数据库中对其进行更新。包括删除工作的所有方法,但是put方法始终在Postman中返回405错误。 (也尝试过WebDAV解决方案。)我在这里缺少什么?
放置方法:
transformer
动作
{
"MasterId":1,
"MasterName":"Test"
}
答案 0 :(得分:2)
使用[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)
将实体框架对象公开给客户端是一种不好的做法,您应该使用DTO类并将其映射到实体框架对象。
答案 1 :(得分:1)
首先观察到被调用的URL
api/masters
与控制器操作[HttpPut("{id:int}")]
的路由模板不匹配,该模板将映射到类似URL的
api/masters/{id:int}
调用与操作的路由模板匹配的正确URL
PUT api/masters/1
错误本身是因为您很可能具有与提供的URL匹配但与HTTP Verb匹配的另一条路由。就像控制器操作之一上的根[HttpGet]
一样。这说明了为什么出现 405不允许的方法错误而不是 404找不到错误
答案 2 :(得分:0)
您的方法应为
[HttpPut("{id:int}")]
public async Task<IActionResult> PutMaster(int id,[FromBody] Master master)
{}
您需要在方法中添加[FromBody]
属性。
请求网址应为
PUT api/masters/1
答案 3 :(得分:0)
如果您使用IIS来运行您的应用程序并具有WebDav模块,则可能会出现问题。由于某些奇怪的原因,WebDav不允许PUT。
我刚刚卸载了它,它提供了帮助。