为啥我的 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) 显示 SourceContextMicrosoft.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 应用服务日志记录提供程序?

asp.net core 上传文件服务器拒绝是为啥?

为啥我的 SelectListItem 无法编辑 ASP.NET Core MVC

为啥我的 asp.net 应用程序抛出 ThreadAbortException?

为啥要在 ASP.Net Core 中获取多个 IMemoryCache 实例?