如何使用ASP.Net Web API创建在请求正文中接受任何内容类型的端点

时间:2013-06-10 23:24:54

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

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

有没有办法用通用媒体类型格式化程序定义端点,或者根本不指定一个?我似乎并不介意使用通用Object作为我的方法参数,但是如果没有格式化程序,框架就会无法处理媒体类型。

我们实际上并不需要能够处理这些数据,只需存储它(就像消息系统一样)。

另一方面,我宁愿接收这些数据作为请求体的原始内容,而不是使用多部分表单请求,但如果以这种方式更有意义,那么它可能是一种选择。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

或者,如果你想要比Youssef的建议更低,你可以做..

public Task<HttpResponseMessage> Post(HttpRequestMessage request) {

   var stream = await request.Content.ReadAsStreamAsync();

   return new HttpResponseMessage(HttpStatusCode.Ok) { RequestMessage = request } ;
}