【发布时间】:2018-11-16 09:31:34
【问题描述】:
我在这部分是全新的 - 我的屏幕上有一个 QR 码,适用于 Windows 和移动设备,即您可以单击该 QR 码以在窗口上的同一浏览器中打开具有给定页面的新窗口,或者您可以扫描将在您的手机中打开该页面的二维码。
以前我们只有一台服务器,它工作正常。我们正在为该 QR 码生成 URL,如下所示 -
var urlBuilder = new System.UriBuilder(HttpContext.Request.Url.AbsoluteUri)
{
Path = Url.Action(actionName, controllerName),
Query = "ID=" + model.abc
};
return urlBuilder.ToString();
这用于将网址返回为“http://site.internal/Controller/Action”
这适用于台式机和移动设备
现在我们已经在多台服务器上部署了应用程序并获得了负载均衡器。
现在应用程序的 URL 发生了变化 -
例如负载平衡的外部 URL = https://secure.abc.com
现在,当我们使用相同的代码为 QR 码生成 URL 时,它会采用服务器 URL,即它指向服务器 URL (http://site.internal/Controller/Action) 而不是相对路径/当前 URL。
有没有办法解决这个问题?采用相对路径而不是服务器路径?
编辑 - 我尝试将代码更改为
var urlBuilder = new System.UriBuilder(HttpContext.Request.Url.AbsoluteUri)
{
Path = Url.Action(actionName, controllerName),
Query = "ID=" + model.abc
};
var cleanUrl = urlBuilder.Uri.GetComponents(UriComponents.AbsoluteUri & ~UriComponents.Scheme & ~UriComponents.Host & ~UriComponents.Port,
UriFormat.UriEscaped);
return cleanUrl.ToString();
但它仅适用于桌面。手机无法使用,扫描二维码时手机上没有网址
【问题讨论】:
-
您是否使用相同的 url 动态创建 QR?或者它是一个修复图像?如果是后者,那么你需要换成前者。
-
我正在动态创建二维码
-
你能确认 QR 创建方法使用正确的 uri 吗?
-
我假设负载均衡器没有通过浏览器请求的 URL?你试过this吗?
-
您可以在 web.config 的 appsettings 中添加外部 url,并将 HttpContext.Request.Url.AbsoluteUri 替换为 Configuration.AppSettings["ExternalUrl"]
标签: c# asp.net-mvc-4 uri load-balancing qr-code