Ну, простыми словами:
Вы пытаетесь получить доступ к объекту, который не создан или в настоящее время не находится в памяти.
Итак, как это решить:
if (i == null) {
// Handle this
}
Поиск по имени означает, что некоторые фреймворки позволяют использовать FIndObjects с помощью строк, а код может выглядеть так: FindObject («ObjectName»);
Вы можете использовать HttpEncoder.HeaderNameValueEncode Method в .NET Framework 4.0 и выше.
Для предыдущих версий .NET Framework вы можете использовать собственный кодер, используя логику, указанную на странице справки HttpEncoder.HeaderNameValueEncode:
Обновление:
Как указывает OliverBock, метод HttpEncoder.HeaderNameValueEncode защищен и внутренне. Я пошел в проект с открытым исходным кодом Mono и нашел реализацию моно
void HeaderNameValueEncode (string headerName, string headerValue, out string encodedHeaderName, out string encodedHeaderValue)
{
if (String.IsNullOrEmpty (headerName))
encodedHeaderName = headerName;
else
encodedHeaderName = EncodeHeaderString (headerName);
if (String.IsNullOrEmpty (headerValue))
encodedHeaderValue = headerValue;
else
encodedHeaderValue = EncodeHeaderString (headerValue);
}
static void StringBuilderAppend (string s, ref StringBuilder sb)
{
if (sb == null)
sb = new StringBuilder (s);
else
sb.Append (s);
}
static string EncodeHeaderString (string input)
{
StringBuilder sb = null;
for (int i = 0; i < input.Length; i++) {
char ch = input [i];
if ((ch < 32 && ch != 9) || ch == 127)
StringBuilderAppend (String.Format ("%{0:x2}", (int)ch), ref sb);
}
if (sb != null)
return sb.ToString ();
return input;
}
Just FYI
[здесь] ( https://github.com/mono/mono/ блоб / ведущий / MCS / класс / System.Web / System.Web.Util / HttpEncoder.cs )
извините его за верхнюю часть моей головы, но для вашего объекта запроса должен быть объект заголовков, который вы можете добавить.
i.e. request.headers.add ("blah");
То, что не видно, но должно указывать на вас в правильном направлении.
Выполняет то же самое задание, что и HeaderNameValueEncode (), но также кодирует символы%, поэтому заголовок может быть надежно декодирован позже.
static string EncodeHeaderValue(string value)
{
return Regex.Replace(value, @"[\u0000-\u0008\u000a-\u001f%\u007f]", (m) => "%"+((int)m.Value[0]).ToString("x2"));
}
static string DecodeHeaderValue(string encoded)
{
return Regex.Replace(encoded, @"%([0-9a-f]{2})", (m) => new String((char)Convert.ToInt32(m.Groups[1].Value, 16), 1), RegexOptions.IgnoreCase);
}
Мне помогли Uri.EscapeDataString (headervalue)