Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果标头不';不存在_C#_Asp.net Mvc_Http Headers - Fatal编程技术网

C# 如果标头不';不存在

C# 如果标头不';不存在,c#,asp.net-mvc,http-headers,C#,Asp.net Mvc,Http Headers,我正在使用请求上下文获取名为“token”的头的值 现在,如果标题存在。所有这些都可以工作数百次,但是现在如果标头不存在,我希望它返回null。但它会抛出一个异常System.InvalidOperationExecution 这是我唯一的选择吗?你可以这样做 if (Context.Request.Headers["Token"] != null) { var token = Context.Request.Headers.GetValues("Token");

我正在使用请求上下文获取名为“token”的头的值

现在,如果标题存在。所有这些都可以工作数百次,但是现在如果标头不存在,我希望它返回null。但它会抛出一个异常System.InvalidOperationExecution

这是我唯一的选择吗?你可以这样做

if (Context.Request.Headers["Token"] != null)
{
      var token = Context.Request.Headers.GetValues("Token");         
      return token;
}
else 
      return null;

您可以使用Try-Catch逻辑:

try
{
    var token = context.request.Headers.GetValues("Token");
}

catch
{
    var token = null;
}
尝试使用以下方法:

 var token = string.IsNullOrEmpty(context.request.Headers.GetValues("Token")) ? null :
                               context.request.Headers.GetValues("Token");

Headers
类提供了一个
Contains()
方法

例1:

if (!request.Headers.Contains("Token"))
    {
        return null;
    }
例2:

string token = request.Headers.Contains("Token") ? request.Headers.GetValues("Token").First() : null;

下面是如何检查头是否存在以及值是否为null的示例

这些示例使用的是DotnetCore3.1

检查它是否存在-不关心值:

if(context.HttpContext.Request.Headers.Any(h=>h.Key.Equals(“X-SOME-HEADER”,StringComparison.InvariantCultureIgnoreCase))){
//成功
_logger.LogInformation('Header found');
}否则{
//失败
_logger.LogWarning('Header not found');
}
检查它是否存在并输出值:
if(context.HttpContext.Request.Headers.TryGetValue(“X-SOME-HEADER”,out-var-token)){
//找到的标题
_logger.LogInformation($”找到了标头。Null:[{!token.Any()}]”)
}否则{
//失败
_logger.LogWarning('Header not found');
}

我遇到了同样的问题,当标题不存在时,它会向我抛出一个错误。然而,我已经设法找到了一种使用.NETCore3.1的简单方法,可以在一行中完成,并且可以避免出现这些错误

但简而言之,它会检查报头是否包含键“Token”,如果是,则返回值,否则返回null

string token = HttpContext.Request.Headers.ContainsKey("Token") ? HttpContext.Request.Headers["Token"][0] : null;

抛出异常是一项代价高昂的操作。只有在异常情况下才能捕获异常。不是在你的常规代码中。你应该尽量避免。这不是一个好的解决方案。如果
Context.Request.Headers[“Token”]
为空,并且我在视图中使用了
@Token
,这不会引发未定义的错误吗?如果您的
else
没有设置
token=null
?既然可以按原样返回,为什么要将token设置为null?我只是在问。在问题中,它说的是
“但是现在如果头不存在,我希望它返回null。但是它会抛出一个异常System.InvalidOperationExecution”
。。。这还会发生吗?像我提到的那样使用它。添加1-2句解释怎么样?@Falco,没有什么要解释的。在.NETCore中就是这样做的。此处提到的其他解决方案现在将导致异常/编译错误
if (Context.Request.Headers.ContainsKey("Token"))
{
      var token = Context.Request.Headers["Token"].Value;         
      return token;
}
else 
      return null;
string token = HttpContext.Request.Headers.ContainsKey("Token") ? HttpContext.Request.Headers["Token"][0] : null;