当我尝试在我的MVC操作中访问它时,ServerVariables [“UNENCODED_URL”]为空

时间:2011-10-14 13:03:40

标签: asp.net-mvc request.servervariables

我正在为获取请求的URL的404页面编写一个catch-all操作方法,使用正则表达式(\w+)*提取wordy位并将这些以空格分隔的位发送到搜索引擎以生成建议页面列表。

问题是,ServerVariables["UNENCODED_URL"]似乎在Action方法中不可用。但是,其他服务器变量 可用。

我可以将ServerVariables["URL"]ServerVariables["QUERY_STRING"]结合使用,两者都可用。但在某些情况下,这会遗漏URL中可能包含有关用户意图的有效信息的部分内容。

例如,如果格式错误的网址为

/test/007/words/something-with-a-dot.xyz/these-words-are-neglected/?stuff-in-querystring

然后将“网址”和“QUERY_STRING”设为"/test/007/words/something-with-a-dot.xyz""stuff-in-querystring"

“URL”在看起来像文件扩展名之后忽略了所有内容。所以这还不够。

那么UNENCODED_URL有什么用?
我怎样才能获得它的等价物?

1 个答案:

答案 0 :(得分:1)

您是否尝试过HTTP_URL变量?看起来它从MSDN返回原始的编码URL,例如“/vdir/default.asp?querystring”。

Source

另外 - 如果你在控制器的动作方法中,你可以(应该?)使用HttpContext代替SERVER [someProperty]。类似的东西:

var Url = HttpContext.Request.RawUrl;

返回当前请求的完整网址。