我在解析日志文件时遇到了一些恶意请求,发现这种情况我抛出异常,因为我尝试通过将所有内容提取到“?”来提取URL的非查询字符串部分。如果存在:
string s = @"/adServer/adSer�1X���L) [���0�:�^�?ް�9� �a�d�t��h� I����PA� �1 �G���$�";
string ch = "?";
bool b = s.Contains(ch);
int i = s.IndexOf(ch);
但在这种情况下,它包含一个“?”,但是当我尝试.Substring(0, IndexOf("?"))
时,我得到了一个异常,因为IndexOf
为-1。这怎么可能?
这是实际字符串,以防它无法正确呈现:
因此,当此代码运行时,b == True
,但i == -1
。
如果我将代码更改为char ch = '?'
而不是string ch = "?"
,则可以按预期工作。