URL中的“大于”和“小于”符号不起作用

时间:2010-06-14 17:21:59

标签: c# asp.net apache http iis

I, 我有以下URL,由Apache Tomcat应用程序成功处理:

http://localhost:8080/ApplicationX/FileY/UpdateDocument(`<add location="somewhere">ContentZ</add>`).xml?VIEW=RAW

出于某种原因,当我尝试使用ASP.NET Http请求处理程序(实现IHttpHandler的类)在IIS中处理相同的请求时,我得到“错误请求”异常,我的代码永远不会被调用。 我已在注册表中应用此修补程序(http://support.microsoft.com/kb/826437)以允许使用':'字符,但它对于大于和小于字符没有帮助。

任何使这项工作的方法? 在Apache中允许使用它的任何原因,但不允许在IIS中使用吗?

干杯。

P.S。我在使用.NET 3.5 SP1的Windows XP工作站上使用IIS 5.1。

5 个答案:

答案 0 :(得分:5)

尝试使用字符实体来转义这些字符?:

http://localhost:8080/ApplicationX/FileY/UpdateDocument(`&lt;add location="somewhere"&gt;ContentZ&lt;/add&gt;`).xml?VIEW=RAW

答案 1 :(得分:4)

>替换为%3E

并将<替换为%3C

验证并正常工作。

答案 2 :(得分:3)

如果您想避免此类问题,则需要对您的网址进行网址编码。

    String UrlEncode(String value)
    {
        StringBuilder result = new StringBuilder();

        foreach (char symbol in value)
        {
            if ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~".IndexOf(symbol) != -1) result.Append(symbol);
            else result.Append("%u" + String.Format("{0:X4}", (int)symbol));
        }

        return result.ToString();
    }

以上支持unicode,几乎所有内容。

答案 3 :(得分:-1)

如果发送请求的应用程序是无法修改的旧版应用程序,该怎么办?有没有办法解决这个问题,并允许IIS按原样接受请求?

答案 4 :(得分:-2)

您应该将<>符号替换为&lt;&gt;,因为这些字符是特殊字符。因此,请参阅PHP函数urlencode(urlencode)。