【问题标题】:C# - QR code link in case of load balancerC# - 负载均衡器的二维码链接
【发布时间】: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


【解决方案1】:

在做了一些研究之后,我发现唯一的方法是在 web.config 中保留外部 url 键并将绝对 uri 替换为外部 url 键。

另一种方法是将该值分配给服务器上的环境变量

【讨论】:

    猜你喜欢
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    • 2023-04-05
    • 1970-01-01
    • 2015-11-27
    相关资源
    最近更新 更多