带有自定义标头的MVC重定向

时间:2013-08-02 21:00:17

标签: c# asp.net-mvc asp.net-mvc-4 model-view-controller http-headers

希望对于那里的某个人来说,这是一个简单的问题。

基本上收到我的MVC控制器的请求后,我想:

  1. 在回复中添加“授权”标题
  2. 重定向到另一个域中的另一个应用程序
  3. 阅读此外部网站的“授权”标题。
  4. 它似乎是重定向的行为,剥离了我的所有自定义标题和重定向。

    我的问题是,如何添加新标头,并执行重定向,并在接收主机[在重定向结束时]的标题中显示该标题以进行阅读?

2 个答案:

答案 0 :(得分:9)

你做不到。这不是HTTP的工作方式。首先,“重定向”只是一个301,302或(自HTTP 1.1)307状态代码,Location标头设置为客户端应该访问的URL。是客户端发起对该URL的请求,因此您无法控制他们发送的标头。

其次,HTTP是无状态的,因此在某些响应中在某些响应中发送Authorization标头的事实 0 对任何未来请求中发生的任何事件都有影响。 Web浏览器和其他HTTP客户端通过使用服务器端的会话和客户端的cookie来绕过HTTP的无状态特性。客户端使用请求将cookie发送到服务器。 cookie与服务器上会话存储中的项目匹配,服务器从该会话中加载数据,以便像保持状态一样提供外观。

第三,cookie在这种情况下不起作用,因为它们是域绑定的,不会与请求发送到它们不是源自的域。因此,即使您要创建会话以维护授权,另一个站点也永远不会看到它。

FWIW,这里的基本前提是,与不同的域共享身份验证状态,正是开发了OAuth等技术。因此,未来的研究将朝这个方向发展。

答案 1 :(得分:2)

否 - 302重定向由浏览器处理,不会重新附加标题。

选项:

  • 服务器端代理
  • 使用Cookie而不是其他标头(如果它是相同的域,而不是每2个案例)
  • 手动重定向客户端(可能没问题,因为无论如何都要进行AJAX调用)。