【问题标题】:How do I enable IFormFeature in ASP.Net / Kestrel?如何在 ASP.Net / Kestrel 中启用 IFormFeature?
【发布时间】:2021-01-30 11:17:21
【问题描述】:

我想处理多部分文件上传,所以在我的处理程序中我得到了IFormFeature,如下所示:

var formFeature = ctx.Features.Get<IFormFeature>()

但是,它始终是null

我的请求如下所示:

curl -v -X POST -H "Content-Type: multipart/form-data" -F records=@big-file.csv localhost:8080/form

我需要做什么才能在 ASP.Net / Kestrel 中启用IFormFeature

【问题讨论】:

  • 在 aspnet.core github 上搜索 IFormFeature 得到 11 次点击(主要是测试)。只有两个地方设置功能ex,它们都要求请求具有表单内容类型。只是为了验证您的标头是否被识别,您可以检查ctx.Request.HasFormContentType 的值吗?
  • 通过curl 命令,我将内容类型设置为multipart/form-data
  • 这不是我要问的,我看得出来。我在问您是否已验证 aspnet 已正确检测到它
  • 我添加了一个快速打印 HasFormContentType? true 是的,确实如此
  • 我没有答案。我建议这是一个地方开始。它应该为您自动设置,我知道您无需添加任何内容即可启用其中任何一项。如果您没有得到答案,我会在他们的 github 或 gitter 上询问

标签: c# asp.net .net-core kestrel-http-server


【解决方案1】:

我刚遇到这个问题,偶然解决了。对不起,我的 fsharp。

获取

let formContentType = ctx.Request.HasFormContentType

formFeature的结果:

let formFeature = ctx.Features.Get<IFormFeature>()

不再为空。

注释掉 let formContentType = ctx.Request.HasFormContentType 会导致 formFeature 再次为空。

因此,似乎该属性上的 getter 正在触发要解决的问题,否则不会。

【讨论】:

    猜你喜欢
    • 2018-11-28
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    相关资源
    最近更新 更多