2010-12-06 34 views
6

这是所有内部服务器和软件,所以我的选项非常有限,但这正是我所处的位置。这已经是一种解决方法的创可贴,但我别无选择,所以我只是想让它工作。在阅读经典ASP中的标题值时遇到了问题

我的服务器上有一个简单的.asp文件,它受到将处理用户身份验证的服务(我无法控制此服务)的保护。当用户转到此.asp文件时,它需要他们通过服务进行身份验证,然后该服务将其重定向到.asp。

该服务将自定义值插入到http头中,该头允许我确定谁已登录(我需要它进一步下行)。当我使用asp查看标题中的ALL_RAW和ALL_HTTP值时,我可以看到所有的自定义值。但是当我尝试将这些值特别调用时,我什么也得不到。

我跑这个简单的循环:

<% 
for each x in Request.ServerVariables 
    response.write("<B>" & x & ":</b> " & Request.ServerVariables(x) & "<p />") 
next 
%> 

所有按键显示,包括自定义的。但是没有一个定制会。这些值是我需要的部分。

我可以找到唯一关于自定义值的唯一的事情是,它们在ALL_RAW值中看起来略有不同,但它们在ALL_HTTP中看起来都是正确的。尽我所知,他们格式正确。标准和自定义值之间唯一的格式差异是大小写和下划线,而不是连字符。

为什么我不能读取这些自定义值?

+1

这可能是有问题的服务正在编码错误或插入空字节或其他不可见的字符,这是搞砸了解析。或者可能是服务到达标题太迟。 – 2010-12-06 22:24:44

回答

1

为了方便起见,为什么不自己分析Request.ServerVariables(“ALL_RAW”)呢?

+0

其实,我发布了这个问题,然后着手做这个。除了我试图解析ALL_HTTP。但是你显然不能“仅仅解析ALL_HTTP”。它不会在vbCrLf上分割。但是在你提到的时候,我尝试用ALL_RAW替换ALL_HTTP,并且它会在vbCrLf上分割,所以现在,这就是我要走的方向。 – MitchelWB 2010-12-06 22:59:50

12

我找到了我的答案。

当我运行这个循环

<% 
for each x in Request.ServerVariables 
    response.write("<B>" & x & ":</b> " & Request.ServerVariables(x) & "<p />") 
next 
%> 

将返回所有均在头和它们的值的名称的列表。我查找的自定义值将显示为名称“HTTP_CUSTOM_ID”,我可以看到它,它的值在ALL_HTTP和ALL_RAW中,但是当我试图拉取该特定值时,它会返回一个空字符串。我偶然在(通过谈话别人在这里谁曾通过相同的服务,我试图适应类似的情况了工作的解决方案是使用:

<%=Request.ServerVariables("HEADER_CUSTOM_ID")%> 

当查看完整标题,没事领着我使用HEADER前缀而不是HTTP,事实上,它引导了我与之相反,而且我从来没有在网上找到任何关于此的提及,所以我在这里张贴我自己的问题的答案,所以它在网上。

+1

这实际上帮助了我今天。我必须在一个非常古老的项目上做一些工作。谢谢。 – jessegavin 2011-03-16 19:10:34

0

还有人比你分析每个项目一个更好的办法。在Request.ServerVariables("ALL_HTTP")看价值观和找到你需要的头,但命名有点不同。

所有HTTP标头都以HTTP_开头。我一直在寻找If-None-Match并且它在收藏集中为HTTP_IF_NONE_MATCH。要获得我使用的值Request.ServerVariables("HTTP_IF_NONE_MATCH")