.netcore PUT方法405方法不允许

时间:2019-11-24 11:08:09

标签: c# asp.net-core asp.net-core-routing

我有一个简单的模型,因为它有2个字段,并使用以下put方法,因此我打算在数据库中对其进行更新。包括删除工作的所有方法,但是put方法始终在Postman中返回405错误。 (也尝试过WebDAV解决方案。)我在这里缺少什么?

enter image description here

放置方法:

transformer

动作

{
    "MasterId":1,
    "MasterName":"Test"
}

4 个答案:

答案 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。

我刚刚卸载了它,它提供了帮助。