【问题标题】:ASP.NET MVC: How to reliably get the real URL of the current request?ASP.NET MVC:如何可靠地获取当前请求的真实 URL?
【发布时间】:2012-03-27 12:49:28
【问题描述】:

现在我有一个在 http://127.0.0.1:8081/ 上运行的 MVC 应用程序(它实际上在 Azure 计算模拟器中运行)。浏览器位置栏清楚地显示端口号为 8081。

但是,Request.UrlRequest.RawUrl 都给了我http://127.0.0.1:8082/

我需要发送一封包含 URL 的电子邮件,因此我需要正确的主机名和端口号。如何可靠地获取实际的、真实的 URL,并且不会出现这种意外偏差?

【问题讨论】:

标签: c# .net asp.net-mvc-3


【解决方案1】:

您可以使用Request.Headers["Host"];,它将为您提供具有正确端口号的主机名(或IP)。然后你可以重构 URL。

【讨论】:

  • 谢谢,这适用于主机名和端口号——但现在我知道根本问题是什么,我担心同样的问题会发生在 Scheme(又名协议)上,即 不是主机头的一部分... :(
  • 只要在请求和服务之间存在负载均衡器/路由器 (Azure),这种端口/IP 更改总是可以在任何级别进行。老实说,我无法想象一种全球解决方案。
  • 正确的解决方案,显然,将修复 ASP.NET 中首先设置错误端口号的错误。但由于过于宗教化兼容性,这永远不会发生...)
【解决方案2】:

你也可以使用:

Request.Url.Host

或使用(如果您想要所有首字母而不仅仅是主机):

public ActionResult Index()
{
string Domain = Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host +       (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port);
return View(Domain);
}

本文摘自“丰富代码”
How to Retrieve the Current Domain in ASP.NET MVC?

【讨论】:

    【解决方案3】:

    在作为 Azure 的云中,您的进程可以使用任何端口号在任何地方运行。当前请求将被路由到进程。

    这就是为什么你总是有不同的端口号。

    最好在 web.config 文件中指定你的域名;如果您从配置文件中读取,所有请求将始终相同。

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 1970-01-01
      • 2017-07-09
      • 2017-04-11
      • 1970-01-01
      • 2014-04-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      相关资源
      最近更新 更多