StackExchange.Redis连接Azure Redis Cache报无法解析主机端口异常
异常原因
抛出这个异常的核心逻辑是:StackExchange.Redis的配置解析模块没有正确识别你传入字符串里的配置分隔符,把整段完整连接串当成了仅包含主机:端口的端点地址,传给了只接受端点格式参数的EndPointCollection.Add()方法,最终因为整串不符合host:port格式触发参数校验错误。
常见触发场景:
- 从文档、Azure门户复制连接串时带入了全角逗号、零宽空格、转义残留字符等不可见特殊符号,导致解析器无法识别逗号作为配置项分隔符
- 项目存在NuGet包冲突:比如同时引用了普通版和强命名版的StackExchange.Redis,或者包版本过旧存在解析逻辑bug
- 连接串里的密码部分包含未转义的特殊字符,打断了解析器的分段逻辑
修复方案
按以下优先级操作,第一种方案可以100%绕开字符串解析问题,优先使用:
- 改用强类型
ConfigurationOptions构造连接配置,完全跳过字符串解析流程,示例代码:
var redisOptions = new ConfigurationOptions { EndPoints = { "mycompanyname.redis.cache.windows.net:6380" }, Password = "替换为你的Azure Redis实际访问密钥", Ssl = true, AbortOnConnectFail = false, // Azure Redis默认要求TLS 1.2及以上版本,显式指定避免协议协商失败 SslProtocols = System.Security.Authentication.SslProtocols.Tls12 }; builder.Services.AddSingleton(ConnectionMultiplexer.Connect(redisOptions));
- 如果要保留纯字符串连接的写法,不要直接复制粘贴原有连接串,手动逐字符输入完整配置,确保所有分隔逗号为英文半角,前后无多余空格、特殊字符,标准格式如下:
mycompanyname.redis.cache.windows.net:6380,password=你的Azure Redis访问密钥,ssl=True,abortConnect=False,sslprotocols=tls12 - 检查项目NuGet引用,删除重复的StackExchange.Redis相关包(不要同时存在
StackExchange.Redis和StackExchange.Redis.StrongName引用),升级到最新稳定版后重新编译运行。
内容的提问来源于stack exchange,提问作者John Kears
相关产品推荐
相关产品推荐

