我有一个相对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?
最佳答案 相对路径必须首先转换为绝对路径.我使用激动的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");
这不包括转移portnumber(您可能希望在其他情况下执行此操作).就个人而言,我会将上面的代码放在一个帮助器方法中,该方法也处理端口(以及运行localhost时要做的任何不同的操作).
希望这可以帮助.