从(虚拟)波浪号引用路径获取完整URL

时间:2016-11-15 22:19:25

标签: asp.net-core asp.net-core-mvc

如何通过代字号使用相对路径命名法时获取完整的URL字符串?例如,如果我想使用相对路径引用我视图中的某些内容...

~/images/mylogo.jpg

我想获得完整的网址,以便最终看起来像......

https://myserver:8081/images/mylogo.jpg

需要填充Open Graph的元标记。我想用...

<meta property="og:image" content="@Url.Content("~/images/mylogo.jpg")" />

...但这只会产生导致......的相对路径。

<meta content="/images/mylogo.jpg" property="og:image">

详细信息 - 需要检测是否使用了SSL。需要确定当前端口和主机名...

1 个答案:

答案 0 :(得分:2)

Getting absolute URLs using ASP.NET Core MVC 6处可能的重复答案非常相似,但没有解决波浪号的使用问题。对于代字号,我使用了URL Helper'Content'方法。为了完整性,这里是我降落的地方......

创建扩展方法......

using Microsoft.AspNetCore.Mvc;

namespace testProject.Utilities
{
    public static class MVCExtensionMethods
    {
        public static string BaseUrl(this IUrlHelper helper)
        {
            var url = string.Format("{0}://{1}", helper.ActionContext.HttpContext.Request.Scheme, helper.ActionContext.HttpContext.Request.Host.ToUriComponent());
            return url;
        }

        public static string FullURL(this IUrlHelper helper, string virtualPath)
        {
            var url = string.Format("{0}://{1}{2}", helper.ActionContext.HttpContext.Request.Scheme, helper.ActionContext.HttpContext.Request.Host.ToUriComponent(), helper.Content(virtualPath));

            return url;
        }
    }
}

通过Razor查看......

@using testProject.Utilities

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />

        <meta property="og:url" content="@Url.BaseUrl()" />
        <meta property="og:type" content="website" />
        <meta property="og:title" content="@ApplicationConstants.ApplicationTitle" />
        <meta property="og:description" content="@ApplicationConstants.TagLine" />
        <meta property="og:image" content="@Url.FullURL("~/images/logo-black.png")" />

        <title>@ApplicationConstants.ApplicationTitle</title>

        <link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />

        @Html.ApplicationInsightsJavaScript(TelemetryConfiguration)
    </head>
    <body>
    </body>
</html>

概要...

MVC有两种帮助程序--HTML帮助程序和URL帮助程序。我在尝试使用HTML帮助程序时获取URL。本来应该使用URL帮助程序。可能的双重答案指示我查看URL帮助程序。它没有显示使用波浪号虚拟目录命名法...