如果客户端将不支持的媒体类型的数据发送到HTTP服务器,则服务器将回答状态为“415 unsupported media type”。但是如何告诉客户端支持哪些媒体类型?是否有标准或至少推荐的方法?或者它只是作为文本写入响应主体?
答案 0 :(得分:8)
在这种情况下,没有任何规范要做什么,所以期望实现遍布整个地方。 (如果服务器的响应包含类似Accept:
标题的内容,那将是明智的,因为如果当前方向错误,那么它具有非常正确的语义。)
答案 1 :(得分:0)
我相信你可以用OPTIONS
Http动词来做到这一点。
如果您的方案适合某个用例,也可以使用300 Multiple Choices
的状态代码。如果他们发送的Accept
标头为application/xml
且您只支持text/plain
且该表示位于不同的网址,那么您可以使用300并在位置标头中回复该网址那种表述。我意识到这可能不完全适合你的问题,但这是另一种可能的选择。
来自HTTP规范:
10.4.7 406不可接受
请求标识的资源只能生成响应实体,这些响应实体的内容特征根据请求中发送的接受标头不可接受。
除非是HEAD请求,否则响应应该包括一个实体,其中包含可用实体特征和位置的列表,用户或用户代理可以从中选择最合适的实体特征和位置。实体格式由Content-Type头字段中给出的媒体类型指定。根据用户代理的格式和功能,可以自动选择最合适的选择。但是,本规范没有为此类自动选择定义任何标准。
Note: HTTP/1.1 servers are allowed to return responses which are
not acceptable according to the accept headers sent in the
request. In some cases, this may even be preferable to sending a
406 response. User agents are encouraged to inspect the headers of
an incoming response to determine if it is acceptable.
答案 2 :(得分:0)
TL;博士;
编辑生成的代理类以继承Microsoft.Web.Services3.WebServicesClientProtocol
**。
我在排除此错误时遇到了这个问题,所以我想我会帮助下一个可能来到这里的人,虽然不确定它是否回答了所述的问题。我遇到了这个错误,在某些时候我不得不接管使用WSE和MTOM编码的现有解决方案。这是一个调用Web服务的Windows客户端。
到目前为止,客户端正在调用Web服务,它会抛出该错误。
有助于解决该错误的一点是检查显然默认生成的Web服务代理类是从System.Web.Services.Protocols.SoapHttpClientProtocol
继承的。
基本上这意味着它实际上并没有使用WSE3。
无论如何我手动编辑了代理并将其更改为继承自Microsoft.Web.Services3.WebServicesClientProtocol
。
BTW,要查看VS中生成的代理类,请单击Web引用,然后单击“显示所有文件”工具栏按钮。 reference.cs是欢乐的地方!
希望它有所帮助。
答案 3 :(得分:-3)
在第81页的“HTTP Developer's Handbook”一书中,Chris Shiflett解释了415的含义,然后他说,“HTTP响应内容中使用的媒体类型应该在Content-Type实体标题中指出。 “
1)Content-Type也是可能的答案吗?它可能是以逗号分隔的已接受内容类型列表。这种可能性的明显问题是Content-Type是实体头而不是响应头。
2)或者这是书中的拼写错误?他真的想说“HTTP请求”吗?