【发布时间】:2020-12-15 14:10:16
【问题描述】:
背景:使用 Angular,.net Core 2.2。使用 Windows 身份验证。
尝试在服务器上发出任何 put 请求时,我在服务器上收到“HTTP405:错误方法 - 不支持使用的 HTTP 动词”(在本地工作正常)。有谁知道为什么?我在控制器级别将请求声明为 HttpPut 时似乎找不到问题,是否需要在 IIS 上设置一些配置?
我的 web api 控制器设置为:
namespace appSchool.APIs
{
[Authorize]
[Route("api/engagements")]
public class EngagementController : ControllerBase
{
EngagementProvider _engagementProvider;
ILogger _logger;
public EngagementController(EngagementProvider engagementProvider, ILogger<EngagementController> logger)
{
_logger = logger;
_engagementProvider = engagementProvider;
}
[HttpGet]
public async Task<ActionResult> Get()
{
try
{
var engs = await _engagementProvider.GetEngagementsAsync();
var dtoEngs = Engagement.MapForDto(engs);
return Ok(dtoEngs);
}
catch (Exception exp)
{
_logger.LogError(exp.Message);
return StatusCode(500, exp);
}
}
[HttpPost]
[Authorize]
public async Task<ActionResult> Post([FromBody]Engagement eng)
{
try
{
var newEng = await _engagementProvider.InsertEngagementAsync(eng);
if (newEng == null)
{
return StatusCode(500, "Unable to insert engagement");
}
return Ok(newEng);
}
catch (Exception exp)
{
_logger.LogError(exp.Message);
return StatusCode(500, exp);
}
}
[HttpPut]
[Authorize]
public async Task<ActionResult> Put([FromBody]Engagement eng)
{
try
{
var updEng = await _engagementProvider.UpdateEngagementAsync(eng);
if (updEng == null)
{
return StatusCode(500);
}
return Ok(updEng);
}
catch (Exception exp)
{
_logger.LogError(exp.Message);
return StatusCode(500, exp);
}
}
我对角度服务的要求是
updateEngagement(updatedEngagement: Engagement) : Observable<Engagement> {
return this.http.put<Engagement>(this.engagementUrl, updatedEngagement);
}
【问题讨论】:
-
您的 IIS 上是否安装了 WebDAV 模块?如果您有权访问您的服务器,您可以在 IIS 上执行失败的请求跟踪。请参阅此处以了解如何做到这一点 - stackify.com/beyond-iis-logs-find-failed-iis-asp-net-requests
-
当您的代码返回 500 时,为什么会得到 405?看来它没有进入您的代码。编码每一项都有效吗?如果是这样,它最后一次起作用是什么时候?它是否适用于其他帖子。
-
@jdweng - 405 是客户端错误,意味着端点本身没有被命中。只有在端点发生实际执行并且端点中的处理出错时,您才会得到 500。
-
没错,它没有击中服务器或500。而是之前失败并给出了405错误的方法。
-
Put 在本地工作正常,而 post/get 在服务器上工作正常。对于 put 方法,它在服务器上根本不起作用
标签: c# asp.net-web-api