HttpHeaders.TryAddWithoutValidation的目的是什么?

时间:2013-02-20 21:51:02

标签: c# .net

在System.Net.Http.Headers命名空间中,HttpHeaders.TryAddWithoutValidationHttpHeaders.Add之间有什么区别?

具体来说,调用Add方法时会进行哪些验证? Add()的文档只是声明:

  

“标头值将被解析和验证。”

2 个答案:

答案 0 :(得分:11)

使用Reflector,这就是 TryAddWithoutValidation 方法在内部执行的操作:

if (!this.TryCheckHeaderName(name))
{
    return false;
}
if (value == null)
{
    value = string.Empty;
}
AddValue(this.GetOrCreateHeaderInfo(name, false), value, StoreLocation.Raw);
return true;

工作在TryCheckHeaderName()函数内部进行。

归结为检查名称是否为空以及它是否与HTTP协议的RFC匹配(即它不包含无效字符等),以及根据一组不允许检查标头标题。

这是源代码:

bool TryCheckHeaderName(string name)
{
   if (string.IsNullOrEmpty(name))
   {
       return false;
   }
   if (HttpRuleParser.GetTokenLength(name, 0) != name.Length)
   {
       return false;
   }
   if ((this.invalidHeaders != null) && this.invalidHeaders.Contains(name))
   {
       return false;
   }
   return true;
}

相比之下,添加方法与异常(双关语)具有类似的行为,如果标题名称因任何一个条件失败而抛出异常TryCheckHeaderName功能。

答案 1 :(得分:1)

TryAddWithoutValidation不会尝试解析给定的值以查看它是否有效(例如,有效的“类型”值或单值标头的多个值)。在尝试添加标头值

之前,Add首先解析该值以执行前面提到的检查