我有一大堆Web服务,每个服务都有几个Web方法。这些服务的消费者多种多样。我想用额外的可选参数(Int64或Int32)来扩充这些Web方法中的每一个,但是使用这个额外的(可选参数)添加新方法是很多工作并且让客户端使用新方法将更耗时
所以我想知道是否可以允许希望利用此param提供的新功能的客户端可以在HTTP标头中以其他方式传递此Int。
所以第一个问题是我可以在HTTP标头中传递一个int吗?如果是这样,那怎么会在C#/ ASP.NET中做到这一点?
否则,您有什么其他建议来解决这个问题?
答案 0 :(得分:9)
它有点不正统,我确信一些纯粹主义者会对这个想法感到不满(标题只应该用于传输消息,并且不应该包含消息的语义)。
实际上它可行,但您希望确保所有客户端都可以添加这些标头。如果您的客户使用工具调用Web方法而不是自己生成HTTP请求(我希望是这种情况),那么这是一个真正的问题。
为什么添加这些额外的方法重载是如此困难?
答案 1 :(得分:6)
是的,它是允许的 - 但请注意,它可能会切断使用代理的能力,有时也会阻止http感知防火墙(它们倾向于检查和重写标头)。
答案 2 :(得分:5)
Request.Headers.Add("headername", "headervalue");
Response.Headers.Add("headername", "headervalue");
答案 3 :(得分:2)
我曾经使用过这个概念来处理内联网Web应用程序中的ajax调用的注销重定向(与webservice无关)。
这是我手边的最佳解决方案,但正如其他一些人所说,这取决于您是否可以将约束推送到客户端以便为您的目的处理这些标题。
绝对不是你默认想做的事情。
答案 4 :(得分:1)
您可以,但必须定义标题,然后设置其值。就像在HttpWebRequest中一样,你可以添加任何标题,只要它不是其中一个标题。
答案 5 :(得分:1)
请注意,虽然在ASP.NET中使用自定义标头很好,但并不总是可以在ASP.NET中生成自定义标头。只有在运行ASP.NET集成模式(即IIS 7.0)时才能执行此操作。
答案 6 :(得分:1)
你可以,但这首先打败了使用网络服务的整个目的。类似于流行科学书籍中的每个公式将受众减少到一半的说法,每次快速破解增加界面的复杂性将意味着将来会遇到很多麻烦。
答案 7 :(得分:0)
来自 RFC!
确实可以,现在新的 RFC Standards 支持它,
当你想从你的 API GET 但仍然想要 GET 纯粹的诞生(在 GET 中没有主体)时真的很有帮助
要简化阅读,请查看 Mozilla Explanation