C# 如果标头不';不存在
我正在使用请求上下文获取名为“token”的头的值 现在,如果标题存在。所有这些都可以工作数百次,但是现在如果标头不存在,我希望它返回null。但它会抛出一个异常System.InvalidOperationExecution 这是我唯一的选择吗?你可以这样做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");
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;