asp.net core http delete `FromBody` 如果没有内容类型头,则忽略

Uma*_*air 3 c# http asp.net-core

我在 httpDELETE请求中使用正文。我知道目前在删除中有一个正文是非标准的(但允许)。

使用HttpClient不允许删除请求的正文时会出现问题。我知道我可以只使用SendAsync,但我宁愿让我的 API 更灵活。

我希望这个机构是可选的。从某种意义上说,如果 asp.net core 无法确定内容类型,则忽略它。目前,asp.net 核心返回 415,即使没有发送正文(通过HttpClient- 所以内容长度应该为 0)。

可以FromBody这样扩展吗?或者我是否需要在管道中使用一些自定义逻辑?

Ale*_*bov 6

您可以创建在检查内容类型的模型绑定之前执行的 ResourceFilter:

public class AddMissingContentType : Attribute, IResourceFilter
{
    public void OnResourceExecuting(ResourceExecutingContext context)
    {
        context.HttpContext.Request.Headers["Content-Type"] = "application/json";
    }

    public void OnResourceExecuted(ResourceExecutedContext context)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

并将其添加到您的方法中:

[AddMissingContentType]
[HttpDelete]
public async Task<IActionResult> Delete([FromBody]RequestData request)
{
}
Run Code Online (Sandbox Code Playgroud)