FROM Http Header不包括在内,除非它是有效的电子邮件地址

时间:2015-06-01 17:49:58

标签: asp.net google-chrome http asp.net-web-api http-headers

我正在使用Advanced Rest Client Chrome扩展程序来测试对Web API 2端点的请求。我试图在“From”标题中包含一个值,但是当它不是有效的电子邮件地址时,该值为null。 By reading the spec,看起来它应该只是一个有效的电子邮件地址,而不是它必须。这是因为Web API,Chrome,扩展程序或其他原因而发生的事情吗?

1 个答案:

答案 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)来查看实际的原始请求是什么。我先做了这个,然后看到了标题,所以我知道必须以某种方式访问​​它。