0

是否可以让 Web 服务接受没有内容类型标头的 json 格式的请求?

当我传递 Content-type: application/json 标头时,POST 动词效果很好。如果不这样做,则会引发 400 错误。我在这里遇到了很多问题,询问他们为什么要退回 400,答案是内容类型。那么服务器端是否可以代表用户“填写”?

4

2 回答 2

0

如果没有某种内容标头来告诉它如何解释请求,则默认 .NET webstack 不可能这样做。如果您想进入 ASP.NET 堆栈的内部(您可以使用反射器应用程序,例如 ILSpy),您可能会找到一个拦截点,但您很可能必须进行一些自定义 IIS 集成才能获取该模块拦截请求,甚至可能在涉及 ASP.NET 堆栈之前。

对于大多数人来说,让 JSON 请求应用程序引入标头要容易得多。

此外,我鼓励你开始学习如何使用 Reflector 来探索这些堆栈是如何工作的,它们确实很复杂,而且很大,而且可扩展性很高,但代价是工程成本(现在大胆猜测说没有经验的 IIS 开发人员需要大约 50 小时设计这种技术,如果它可以巧妙地完成)。

于 2013-01-16T01:48:16.463 回答
0

您使用的是 WebAPI 还是 ASP.NET MVC?我有一个解决方案给你,尽管有些人可能会对我大喊大叫。

  • 您可以创建一个属性,尝试将请求的主体反序列化为您正在寻找的特定操作的对象。如果它有效,那么您可以使用 RequestContext 将其传递给参数列表。我不知道你需要设置哪些确切的属性,但我记得在 ASP.NET MVC 中做了一些非常相似的事情。

希望有帮助。

PS 使用 JSON.Net,它有很多有用的反序列化方法,这将使这变得轻而易举。

于 2013-01-16T02:11:12.717 回答