Sin*_*5k4 1 c# asp.net-core asp.net-core-routing
我有一个简单的模型,因为它有 2 个字段,并且使用以下 put 方法,我想在数据库中更新它。包括删除在内的所有方法都有效,但是在 Postman 中 put 方法总是返回 405 错误。(也尝试过 WebDAV 解决方案。)我在这里错过了什么?
放置方法:
{
"MasterId":1,
"MasterName":"Test"
}
Run Code Online (Sandbox Code Playgroud)
行动
[HttpPut("{id:int}")]
public async Task<IActionResult> PutMaster(int id, Master master)
{
if (id != master.MasterId)
{
return BadRequest();
}
//...some code
return NoContent();
}
Run Code Online (Sandbox Code Playgroud)
小智 10
如果您的应用程序托管在 IIS 下,并在 ASP.NET Core 中运行 API,请将此行包含在 Web.Config 文件中
<configuration>
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)
使用[HttpPut("{id:int}")]路由属性,您需要通过以下方式引用您的 api:http://localhost:5000/api/masters/ {id}
在你的例子中:
PUT http://localhost:5000/api/masters/1
所以id参数中的也不需要:
[HttpPut("{id:int}")]
public async Task<IActionResult> PutMaster(Master master)
Run Code Online (Sandbox Code Playgroud)
将实体框架对象暴露给客户端是一个不好的做法,您应该使用 DTO 类并将其映射到实体框架对象。
如果您使用 IIS 运行您的应用程序并拥有 WebDav 模块,这可能是一个问题。由于某些奇怪的原因,WebDav 不允许 PUT。
我刚刚卸载了它,它有帮助。
| 归档时间: |
|
| 查看次数: |
5957 次 |
| 最近记录: |