如何在 ASP.Net MVC 5 应用程序中从浏览器获取 URL

Unb*_*ble 6 c# url asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

我有 ASP.Net Web 应用程序,我想获取浏览器中存在的 URL。以下是我的尝试

public static string UrlForGoogleAuth
{
    get
    {
        UrlHelper url = new UrlHelper(HttpContext.Current.Request.RequestContext);

        string host = HttpContext.Current.Request.Url.Host;
        if (host == "localhost")
        {
            host = HttpContext.Current.Request.Url.Authority;
        }
        string result = "https://" + host + url.Action("LoginSettingsSubmit", "Security");
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

场景 1. URL: https: //sample.com - 工作正常并可host variable获取sample.com

场景 2. URL:https://sample.com:2345 -host variable只是获取sample.com而不是sample.com:2345

解决方法(临时修复:结果中硬编码 2345)

 string result = "https://" + host + ":2345" + url.Action("LoginSettingsSubmit", "Security");
Run Code Online (Sandbox Code Playgroud)

但我正在寻找一种无需硬编码的万无一失的解决方案。另外,如果我可以在不改变已经编写的代码中的大量内容的情况下实现结果,那就太好了。

EDIT:

    public static string UrlForGoogleAuth
    {
        get
        {
            UrlHelper url = new UrlHelper(HttpContext.Current.Request.RequestContext);   
                host = HttpContext.Current.Request.Url.Authority;
            string result = "https://" + host + url.Action("LoginSettingsSubmit", "Security");
            return result;
        }
    }
Run Code Online (Sandbox Code Playgroud)

Dan*_*son 5

Uri.Authority将为您提供主机名和端口(如果 URL 有)。

获取服务器的域名系统 (DNS) 主机名或 IP 地址以及端口号。

// www.sample.com:8080
Console.WriteLine(new Uri("https://www.sample.com:8080/controller/action").Authority);

// www.sample.com
Console.WriteLine(new Uri("https://www.sample.com/controller/action").Authority);
Run Code Online (Sandbox Code Playgroud)

因此,在您的情况下,您只需使用以下内容:

HttpContext.Current.Request.Url.Authority
Run Code Online (Sandbox Code Playgroud)