我正在使用请求上下文来获取名为“token”的标头的值。
var token = context.request.Headers.GetValues("Token")
现在如果标题存在。这一切都可以工作数百个,但是现在如果标头不存在,我希望它返回null。但它会引发异常System.InvalidOperationExecption
我唯一的选择是试一试吗?
答案 0 :(得分:6)
你可以这样做
if (Context.Request.Headers["Token"] != null)
{
var token = Context.Request.Headers.GetValues("Token");
return token;
}
else
return null;
答案 1 :(得分:0)
您可以使用Try Catch逻辑:
try
{
var token = context.request.Headers.GetValues("Token");
}
catch
{
var token = null;
}
答案 2 :(得分:0)
尝试使用此:
var token = string.IsNullOrEmpty(context.request.Headers.GetValues("Token")) ? null :
context.request.Headers.GetValues("Token");
答案 3 :(得分:0)
Headers
类提供了一种Contains()
方法。
示例1:
if (!request.Headers.Contains("Token"))
{
return null;
}
示例2:
string token = request.Headers.Contains("Token") ? request.Headers.GetValues("Token").First() : null;
答案 4 :(得分:0)
下面是如何检查标头是否存在以及值是否为空的示例。
这些示例正在使用DotNet Core 3.1
if (context.HttpContext.Request.Headers.Any(h => h.Key.Equals("X-SOME-HEADER", StringComparison.InvariantCultureIgnoreCase))) {
// Success
_logger.info('Header found');
} else {
// Failure
_logger.info('Header not found');
}
if (context.HttpContext.Request.Headers.TryGetValue("X-SOME-HEADER", out var token)) {
// Found header
_logger.info($"Header found. Null:[{!token.Any()}]")
} else {
// Failure
_logger.info('Header not found');
}
答案 5 :(得分:0)
我遇到了同样的问题,当标题不存在时,会向我抛出错误。但是,我设法找到了一种使用.NET Core 3.1的简单方法,并且可以在1行中完成,并且可以避免出现任何这些错误。
但简而言之,它会检查标头是否包含键“令牌”,如果是,则返回值,否则返回null。
string token = HttpContext.Request.Headers.ContainsKey("Token") ? HttpContext.Request.Headers["Token"][0] : null;
答案 6 :(得分:-1)
if (Context.Request.Headers.ContainsKey("Token"))
{
var token = Context.Request.Headers["Token"].Value;
return token;
}
else
return null;