在ASP.NET Core中,内容类型 "applicationcsp-report "的 "415不支持的媒体类型"。

我有一个内容安全策略,导致 Chrome 浏览器发布报告,但接收报告的操作却返回 “415 不支持的媒体类型”。我理解这是因为该帖子的内容类型为 “applicationcsp-report”。我如何将其添加为 Core 3.1 中允许的内容类型(基本上就是 json)。

操作

// https://anthonychu.ca/post/aspnet-core-csp/
[HttpPost][Consumes("application/csp-report")]
public IActionResult Report([FromBody] CspReportRequest request)
{
    return Ok();
}

缩小版模型

public class CspReportRequest
{
    [JsonProperty(PropertyName = "csp-report")]
    public CspReport CspReport { get; set; }
}

public class CspReport
{
    [JsonProperty(PropertyName = "document-uri")]
    public string DocumentUri { get; set; }
}

解决方案:

下面的示例展示了如何向Chrome浏览器添加支持。SystemTextJsonInputFormatter 用于处理额外的媒体类型。

services.AddControllers(options =>
{
    var jsonInputFormatter = options.InputFormatters
        .OfType<SystemTextJsonInputFormatter>()
        .Single();

    jsonInputFormatter.SupportedMediaTypes.Add("application/csp-report");
});

这是一个两步走的过程。

  1. 查询已配置的输入格式列表,以找到… … SystemTextJsonInputFormatter.
  2. 增加 application/csp-report 到其现有支持的媒体类型列表中(application/json, text/jsonapplication/*+json).

如果你使用的是Json.NET而不是 System.Text.Json办法是 类似:

services.AddControllers(options =>
{
    var jsonInputFormatter = options.InputFormatters
        .OfType<NewtonsoftJsonInputFormatter>()
        .First();

    jsonInputFormatter.SupportedMediaTypes.Add("application/csp-report");
})

有两个小区别。

  1. 类型是: NewtonsoftJsonInputFormatter 而不是 SystemTextJsonInputFormatter.
  2. 两种 的实例,所以我们将目标放在第一个实例上(见 本回答 具体内容)。)

详见 输入格式 在ASP.NET Core文档中了解更多关于这些的信息。

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何过滤空通量

2022-9-8 11:55:34

未分类

试图用 pipe() 在两个进程之间进行通信,会破坏程序。

2022-9-8 11:55:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索