VS2013 MVC C#:从web.config读配置拼接OAuth URL语法错误求助
修复C# MVC中OAuth URL拼接的语法/格式错误
你的代码拼接URL时主要存在未对参数值做URL编码的问题,另外还有两处潜在风险,以下是修正后的代码:
public ActionResult Signin() { var state = Guid.NewGuid().ToString(); var authEndpoint = ConfigurationManager.AppSettings["AuthorizationEndpoint"] ?? string.Empty; var redirectUri = Uri.EscapeDataString(ConfigurationManager.AppSettings["RedirectUri"] ?? string.Empty); var clientId = Uri.EscapeDataString(ConfigurationManager.AppSettings["ClientId"] ?? string.Empty); var environment = Uri.EscapeDataString(ConfigurationManager.AppSettings["Environment"] ?? string.Empty); var encodedState = Uri.EscapeDataString(state); var oAuthUrl = $"{authEndpoint}?response_type=code&redirect_uri={redirectUri}&client_id={clientId}&env={environment}&state={encodedState}"; return Redirect(oAuthUrl); }
关键修改说明:
- URL编码所有参数值:使用
Uri.EscapeDataString()对redirect_uri、client_id等参数值进行编码,避免参数中包含的&、=、/等特殊字符破坏URL结构,这是导致URL语法错误的核心原因。 - 显式处理Guid转换:将
Guid.NewGuid()改为Guid.NewGuid().ToString(),明确生成字符串类型的state值,避免隐式转换可能带来的格式问题。 - 配置项空值防护:用
?? string.Empty处理每个配置项,防止某个配置缺失时生成包含空参数的无效URL。
内容的提问来源于stack exchange,提问作者Ran
相关产品推荐
相关产品推荐

