【问题标题】:How to create an endpoint that accepts any content type in the request body using ASP.Net Web API如何使用 ASP.Net Web API 创建一个接受请求正文中任何内容类型的端点
【发布时间】:2013-06-10 23:24:54
【问题描述】:

我想创建一个通用 API 端点,客户端可以将文本或文件数据发布到其中,我们不知道数据的内容/媒体类型。该框架似乎需要为 HTTP 标头中传递的任何内容类型指定内容格式化程序,否则会引发错误。我不想为我们可能接受的每种可能的媒体类型定义一个格式化程序,因为我们还不知道它们可以包含什么。

有没有办法用通用媒体类型格式化程序定义端点,或者根本不指定一个?如果我使用泛型 Object 作为我的方法参数似乎并不介意,但框架一直因无法在没有格式化程序的情况下处理媒体类型而陷入困境。

我们实际上并不需要能够处理这些数据,只需将其存储(用于消息传递系统之类的东西)。

附带说明,我宁愿将此数据作为请求正文的原始内容接收,而不是使用多部分表单请求,但如果这样做更有意义,它可能是一种选择。

【问题讨论】:

    标签: asp.net asp.net-web-api


    【解决方案1】:

    或者如果你想比优素福的建议更底层,你可以这样做..

    public Task<HttpResponseMessage> Post(HttpRequestMessage request) {
    
       var stream = await request.Content.ReadAsStreamAsync();
    
       return new HttpResponseMessage(HttpStatusCode.Ok) { RequestMessage = request } ;
    }
    

    【讨论】:

    • 接受这个作为更彻底的可以做的事情。很好的答案 - 谢谢!
    【解决方案2】:

    您可以通过自己阅读内容来完全绕过格式化程序。这是一个例子:

    public async Task Post()
    {
        string content = await Request.Content.ReadAsStringAsync();
        // Store away the content
    }
    

    这根本不需要您使用或定义任何格式化程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 2019-02-07
      • 2020-01-23
      • 2022-01-13
      • 2013-12-11
      相关资源
      最近更新 更多