【问题标题】:Curl 415 Unsupported Media TypeCurl 415 不支持的媒体类型
【发布时间】:2020-02-13 11:52:06
【问题描述】:

我正在尝试使用 curl 测试我的端点并获得 415:

curl -X POST "http://localhost:5001/api/countries/import" \
--header "Content-Type: application/json" \
--header "Authorization: Bearer "$API_TOKEN \
--data @/D:/_countries.json

回复:

{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.13","title":"Unsupported Media Type","status":415,"traceId":"0HLTFOME7T990:00000001"}

这是我的 .net 核心端点:

// POST api/countries/import
[HttpPost]
[Route("[action]")]
public async Task<IActionResult> Import(IFormFile file)
{
    ...
}

顺便说一句,我对邮递员中的这个端点没有任何问题,尽管它生成的代码对我不起作用(响应相同):

curl --location --request POST 'http://localhost:5001/api/countries/import' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {token here}' \
--form 'file=@/D:/_countries.json'

附:我正在使用 Windows 10 和 git bash 来运行脚本。

【问题讨论】:

    标签: api curl post asp.net-core-webapi


    【解决方案1】:

    不支持的媒体类型

    您的操作 public async Task&lt;IActionResult&gt; Import(IFormFile file) 期望 IFormFile 参数,但您使用 Content-Type: application/json 指定了请求标头,这导致了此问题。

    请尝试将标头指定为--header 'Content-Type: multipart/form-data',如下所示。

    【讨论】:

      【解决方案2】:

      这也可能表明存在路由器问题。

      考虑以下签名

      [HttpGet("GetNearByPlaces")]
          public async Task<IActionResult> GetNearByPlaces(double lattitude, double longitude, IEnumerable<SearchPlaceType> types = null)
      

      框架正在尝试根据此示例中的纬度经度和类型来确定路径是否存在。 但是,不支持 IEnumerable(路径可能包含不确定数量的参数,例如 /23.4/34.5/4/4/6/4),因此返回 415。

      修改签名如下即可修复。

              [HttpGet("GetNearByPlaces")]
          public async Task<IActionResult> GetNearByPlaces([FromQuery] double lattitude, [FromQuery] double longitude, [FromQuery] IEnumerable<SearchPlaceType> types = null)
      

      “[FromBody]”属性也可以解决问题。

      【讨论】:

        猜你喜欢
        • 2019-03-23
        • 2014-05-10
        • 2019-05-01
        • 2012-06-20
        • 2017-06-30
        • 2017-07-05
        • 2016-11-26
        相关资源
        最近更新 更多