【问题标题】:How do I force a relative URI to use https?如何强制相对 URI 使用 https?
【发布时间】:2010-09-10 12:14:18
【问题描述】:

我有一个相对 URI:

Uri U = new Uri("../Services/Authenticated/VariationsService.svc", 
                               UriKind.Relative);

问题在于,根据用户是否在其 Web 浏览器中键入 https:// 或 http:// 来访问 silverlight 应用程序,它可能在尝试联系服务时使用 http 或 https。

我想强制程序使用 https 来连接服务。

最初我尝试过这个:

            Uri U = new Uri("../Services/Authenticated/VariationsService.svc", 
                               UriKind.Relative);

            string NU = U.AbsoluteUri;

            U = new Uri(NU.Replace("http://", "https://"), UriKind.Absolute);

但它在 U.AbsoluteUri 失败,因为它无法在那个阶段将相对 Uri 转换为绝对 Uri。那么如何将 Uri Scheme 改为 https 呢?

【问题讨论】:

  • 标题中无需重复标签。我去帮你修好了。

标签: c# silverlight wcf iis-6 https


【解决方案1】:

必须先将相对路径转换为绝对路径。我使用正在执行的 Silverlight XAP 文件的 Uri 来做到这一点。

可能有一些方法可以减少这种情况(用 Uris 进行字符串操作感觉不对)但这是一个开始:

    // Get the executing XAP Uri
    var appUri = App.Current.Host.Source;

    // Remove the XAP filename
    var appPath = appUri.AbsolutePath.Substring(0, appUri.AbsolutePath.LastIndexOf('/'));

    // Construct the required absolute path
    var rootPath = string.Format("https://{0}{1}", appUri.DnsSafeHost, appUri.AbsolutePath);

    // Make the relative target Uri absolute (relative to the target Uri)
    var uri = new Uri(new Uri(rootPath), "../Services/Authenticated/VariationsService.svc");

这不包括传输端口号(在其他情况下您可能希望这样做)。就我个人而言,我会将上述代码放在一个辅助方法中,该方法还可以处理端口(以及在运行 localhost 时您想要做的任何不同的事情)。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    相反,您应该更改托管 Silverlight 的 ASPX 文件,并强制用户仅在他/她使用非 SSL url 登录时重定向到 SSL。因为在理想情况下,如果 silverlight 只打开与加载它的域和方案相同的连接,那将是完美的。

    【讨论】:

    • 这并不能回答问题,但我认为这实际上是我要做的。谢谢
    【解决方案3】:

    协议是一个单独的组件,所以我认为你可以把它放在你的相对地址前面:

    Uri U = new Uri("https:../Services/Authenticated/VariationsService.svc", UriKind.Relative);
    

    【讨论】:

    • 似乎不起作用:无效的 URI:无法解析授权/主机。此错误在以下行抛出:EndpointAddress address = new EndpointAddress(U, null);
    • 为什么不把整个字符串放入 URI 中呢? https://www.mysite.org/Services/Authenticated/VariationsService.svc,还是我错过了什么?
    • 这不符合要求,因为如果域名发生变化,它会降低项目的灵活性。
    【解决方案4】:

    “方案”在相对 URI 中没有任何意义。您必须在某些时候将其转换为绝对 URI 才能更改方案。

    【讨论】:

      猜你喜欢
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 2015-02-27
      • 2012-02-24
      • 2011-11-23
      • 1970-01-01
      相关资源
      最近更新 更多