【发布时间】:2013-01-16 01:43:27
【问题描述】:
是否可以让 Web 服务接受没有内容类型标头的 json 格式的请求?
当我传递 Content-type: application/json 标头时,POST 动词效果很好。如果不这样做,则会引发 400 错误。我在这里遇到了很多问题,询问他们为什么要退回 400,答案是内容类型。那么服务器端是否可以代表用户“填写”?
【问题讨论】:
是否可以让 Web 服务接受没有内容类型标头的 json 格式的请求?
当我传递 Content-type: application/json 标头时,POST 动词效果很好。如果不这样做,则会引发 400 错误。我在这里遇到了很多问题,询问他们为什么要退回 400,答案是内容类型。那么服务器端是否可以代表用户“填写”?
【问题讨论】:
如果没有某种内容头来告诉它如何解释请求,默认的 .NET webstack 是不可能这样做的。如果您想进入 ASP.NET 堆栈的内部(您可以使用反射器应用程序,例如 ILSpy),您可能会找到一个拦截点,但您很可能必须进行一些自定义 IIS 集成才能获取该模块拦截请求,甚至可能在涉及 ASP.NET 堆栈之前。
对于大多数人来说,让 JSON 请求应用程序引入标头要容易得多。
此外,我鼓励你开始学习如何使用 Reflector 来探索这些堆栈是如何工作的,它们确实很复杂,而且很大而且可扩展性很高,但代价是工程成本(现在大胆猜测说没有经验的 IIS 开发人员需要如果可以巧妙地完成这项技术,大约需要 50 小时来设计此技术)。
【讨论】:
您使用的是 WebAPI 还是 ASP.NET MVC?我有一个解决方案给你,虽然有些人可能会对我大喊大叫。
希望对您有所帮助。
附:使用 JSON.Net,它有很多有用的反序列化方法,让这一切变得轻而易举。
【讨论】: