为啥我的 Asp.Net Core 日志中出现“不支持 POST 请求”?
Posted
技术标签:
【中文标题】为啥我的 Asp.Net Core 日志中出现“不支持 POST 请求”?【英文标题】:Why am I getting "POST requests are not supported" in my Asp.Net Core log?为什么我的 Asp.Net Core 日志中出现“不支持 POST 请求”? 【发布时间】:2021-10-01 04:36:51 【问题描述】:我有一个 ASP.NET Core 5 API 设置。我还有一些使用静态内容的 Razor 页面。我正在使用 JWT 进行身份验证。在我的UserController
中,我有一个操作存根正在开发更改密码操作:
[Authorize]
[HttpPost("ChangePassword")]
public IActionResult ChangePassword([FromBody] string password)
HttpContext.Items.TryGetValue("User", out var user);
_logger.ForContext<UsersController>().Debug("User EmailAddress tried to change his password to Password.", ((User)user).EmailAddress, password);
return Ok();
这可以使用 Swagger 进行测试并记录下来。我还有其他 POST 操作。这是我第一次尝试使用HttpContext
获取用户。
但是,只有通过这个新操作,我的日志中才会出现两个条目:
2021 年 7 月 23 日 21:36:24.612 不支持 POST 请求 2021 年 7 月 23 日 21:36:24.605 不支持 POST 请求
日志 (Seq) 显示 SourceContext
是 Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware
。
我想知道为什么我会收到这两个日志条目,我可以放心地忽略它们吗?
【问题讨论】:
【参考方案1】:该日志条目是coming from StaticFileMiddleware
,检查它是否应该接管请求并返回文件响应。
public class StaticFileMiddleware
// ...
public Task Invoke(HttpContext context)
if (!ValidateNoEndpoint(context))
_logger.EndpointMatched();
else if (!ValidateMethod(context))
// ? "POST requests are not supported"
_logger.RequestMethodNotSupported(context.Request.Method);
else if (!ValidatePath(context, _matchUrl, out var subPath))
_logger.PathMismatch(subPath);
else if (!LookupContentType(_contentTypeProvider, _options, subPath, out var contentType))
_logger.FileTypeNotSupported(subPath);
else
// If we get here, we can try to serve the file
return TryServeStaticFile(context, contentType, subPath);
return _next(context);
由于它不提供静态文件,因此它会调用链中的下一个中间件,最终将请求分派到您的控制器。
您可以放心地忽略它。它记录在Debug
级别,仅在您遇到静态文件问题时才重要。
【讨论】:
以上是关于为啥我的 Asp.Net Core 日志中出现“不支持 POST 请求”?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 ASP.Net Core Web API 控制器不返回 XML?
如何为 ASP.NET Core 应用配置 Azure 应用服务日志记录提供程序?
为啥我的 SelectListItem 无法编辑 ASP.NET Core MVC