代码之家  ›  专栏  ›  技术社区  ›  Jimbo

得到一个请求.标题价值

  •  28
  • Jimbo  · 技术社区  · 15 年前

    if (Request.Headers["XYZComponent"].Count() > 0)
    

    也不是这样:

    if (Request.Headers.AllKeys.Where(k => k == "XYZComponent").Count() > 0)
    

    如果没有设置头变量,这两个都会引发异常。任何帮助都将不胜感激。

    6 回复  |  直到 15 年前
        1
  •  52
  •   pim    8 年前
    if (Request.Headers["XYZComponent"].Count() > 0)
    

    ... 将尝试计算返回字符串中的字符数,但如果标头不存在,它将返回NULL,因此它将引发异常。您的第二个示例有效地执行了相同的操作,它将搜索标题集合,如果不存在则返回NULL,然后您将尝试计算其上的字符数:

    改用这个:

    if(Request.Headers["XYZComponent"] != null)
    

    if((Request.Headers["XYZComponent"] ?? "").Trim().Length > 0)
    

    空合并运算符??如果标头为null,将返回一个空字符串,从而停止抛出NullReferenceException。

    if (Request.Headers.AllKeys.Any(k => string.Equals(k, "XYZComponent")))
    

    编辑: 是的

    bool isSet = Boolean.TryParse(Request.Headers["XYZComponent"], out isSet) && isSet;
    

    如果Header值为false,或者Header尚未设置,或者Header不是true或false,则返回false。如果头值是字符串“true”,则返回true

        2
  •  10
  •   Lasse Espeholt    15 年前

    if (Request.Headers["XYZComponent"] != null)
    

    或者更好:

    string xyzHeader = Request.Headers["XYZComponent"];
    bool isXYZ;
    
    if (bool.TryParse(xyzHeader, out isXYZ) && isXYZ)
    

    bool.TryParse 对你有用吗 null

    插件: 您可以使用这个返回可为null的布尔值的扩展方法使这变得更简单。它应该同时适用于无效输入和null。

    public static bool? ToBoolean(this string s)
    {
        bool result;
    
        if (bool.TryParse(s, out result))
            return result;
        else
            return null;
    }
    

    无效的 -不过,这可能令人困惑):

    if (Request.Headers["XYZComponent"].ToBoolean() == true)
    
        3
  •  3
  •   Darin Dimitrov    15 年前

    public ActionResult Index()
    {
        var xyzComponent = Request.Headers["xyzComponent"];
        var model = new MyModel 
        {
            IsCustomHeaderSet = (xyzComponent != null)
        }
        return View(model);
    }
    
        4
  •  2
  •   Rob    15 年前

    下面的代码应该允许您检查您要在中查找的头是否存在 Request.Headers :

    if (Request.Headers.AllKeys.Contains("XYZComponent"))
    {
        // Can now check if the value is true:
        var value = Convert.ToBoolean(Request.Headers["XYZComponent"]);
    }
    
        5
  •  1
  •   LukeH    15 年前
    if ((Request.Headers["XYZComponent"] ?? "") == "true")
    {
        // header is present and set to "true"
    }
    
        6
  •  1
  •   abatishchev Karl Johan    15 年前
    string strHeader = Request.Headers["XYZComponent"]
    bool bHeader = Boolean.TryParse(strHeader, out bHeader ) && bHeader;
    
    if "true" than true
    if "false" or anything else ("fooBar") than false
    

    string strHeader = Request.Headers["XYZComponent"]
    bool b;
    bool? bHeader = Boolean.TryParse(strHeader, out b) ? b : default(bool?);
    
    if "true" than true
    if "false" than false
    else ("fooBar") than null
    
        7
  •  1
  •   Tony    6 年前

    在dotnet核心中, Request.Headers["X-MyCustomHeader"] 退货 StringValues 不会为空。不过,您可以检查计数,以确保找到标题,如下所示:

    var myHeaderValue = Request.Headers["X-MyCustomHeader"];
    if(myHeaderValue.Count == 0) return Unauthorized();
    string myHeader = myHeaderValue.ToString(); //For illustration purposes.