我正在使用Advanced Rest Client Chrome扩展程序来测试对Web API 2端点的请求。我试图在“From”标题中包含一个值,但是当它不是有效的电子邮件地址时,该值为null。 By reading the spec,看起来它应该只是一个有效的电子邮件地址,而不是它必须。这是因为Web API,Chrome,扩展程序或其他原因而发生的事情吗?
答案 0 :(得分:1)
在你对Fiddler看到标题的评论之后,我很好奇所以我做了一点测试。这是我的控制器代码:
public class FromController : ApiController
{
[Route("api/from")]
public dynamic Get()
{
string from1 = null;
string from2 = null;
string from3 = null;
from1 = this.Request.Headers.From;
IEnumerable<string> headers;
if (this.Request.Headers.TryGetValues("From", out headers))
{
from2 = headers.FirstOrDefault();
}
if (HttpContext.Current.Request.Headers.AllKeys.Contains("From"))
{
from3 = HttpContext.Current.Request.Headers["From"];
}
var output = new
{
From1 = from1,
From2 = from2,
From3 = from3
};
return output;
}
}
测试1:发送 e@test.com 作为From标头输出:
{
"From1": "e@test.com",
"From2": "e@test.com",
"From3": "e@test.com"
}
一切都如预期。
测试2:发送垃圾作为From标头输出:
{
"From1": null,
"From2": "junk",
"From3": "junk"
}
这表明您的标题的结果为空,但您可以通过其他方法获得它。
在内部,它会对值进行一些解析。该值存储在无效容器中,因此直接请求它将导致null。通过TryGetValue询问,它忽略任何&#34;有用的&#34;解析,这样你就可以获得价值。
我添加了旧的HttpContext.Current.Request只是为了看看因为这是更原始的形式,但是我在生产中避免使用它并尝试在控制器中坚持使用this.Request。我喜欢使用HttpContext.Current.Request.SaveAs(fileName,true)来查看实际的原始请求是什么。我先做了这个,然后看到了标题,所以我知道必须以某种方式访问它。