1

为什么 .Net WebApi 不会自动检测请求 contentType 并进行自动绑定?

如果我在未通知 contentType 的情况下发出请求,则会发生 HTTP 500 错误:

No MediaTypeFormatter is available to read an object of type 'ExampleObject' from content with media type ''undefined''.

为什么不尝试检测传入的数据并自动绑定?

另一个案例:

这个请求Content-Type: application/x-www-form-urlencoded发送一个JSON

User-Agent: Fiddler
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Host: localhost:10329
Content-Length: 42

Request Body:
{"Name":"qq","Email":"ww","Message":"ee"}:

我的操作不会在对象参数中自动检测 JSON 请求数据:

public void Create(ExampleObject example) //example is null
{
{

为什么他们不尝试解决它,而不是让对象为空?

然后,为了发生绑定,我需要发送Content-Type: application/json.

如果 .Net WebAPI 检测到请求数据的类型并进行自动绑定,那将是最好的吗?为什么不这样呢?

4

2 回答 2

1

听起来您想要做的是从服务器接受多种格式。

http 的工作方式是客户端向服务器请求资源并告诉服务器它理解的内容类型。这意味着客户端没有得到它无法解码的响应,并且服务器知道哪些响应更适合客户端。例如,如果您是 Web 浏览器,最合适的内容类型是 text/html,但如果您获得 XML,您可能也可以用它做一些事情。因此,您将使用以下内容提出请求:

   accept: text/html, application/xml

这说明你更喜欢 html 但也懂 XML

在您的示例中,如果您的客户想要 application/x-www-form-urlencoded 但也可以处理 JSON,那么您应该在发出请求时执行以下操作

 accept: application/x-www-form-urlencoded, application/json

有关更多详细信息,请参阅此处的接受标头 HTTP 规范http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

您可能还想创建一个新的媒体类型格式化程序,以便您的服务器知道如何为客户端提供 application/x-www-form-urlencoded,请查看此博客文章以获取有关如何执行此操作的更多信息http://www。 strathweb.com/2012/04/rss-atom-mediatypeformatter-for-asp-net-webapi/

于 2012-08-12T22:19:56.890 回答
1

application/x-www-form-urlencoded 表示您将以 x-www-form-urlencoded 标准发送数据。以其他标准发送数据将不起作用。

于 2012-08-12T20:59:04.090 回答