首页 > 解决方案 > Html 助手与 IIS 上的相对 url 混淆,在 IISExpress 和 Azure 中正常

问题描述

好的,

我将 MVC 与 .Net 核心一起使用,我有一个 html 帮助程序,可以稍微格式化列标题。

    public static HtmlString SortableColumnName(string controller, string sortFieldOrder, string columnName, string displayName)
    {
        string[] split = sortFieldOrder.Split('_');
        string resultSort;

        string sortField = split[0];
        string sortOrder = split[1];
        if (columnName == sortField)
        {
            if (sortOrder == "asc")
            {
                resultSort = columnName + "_desc";
                return new HtmlString($"<a href='/{controller}/index?sortFieldOrder={resultSort}'>{displayName}</a><span class='fas fa-long-arrow-alt-down'></span>");
            }
            else
            {
                resultSort = columnName + "_asc";
                return new HtmlString($"<a href='/{controller}/index?sortFieldOrder={resultSort}'>{displayName}</a><span class='fas fa-long-arrow-alt-up'></span>");
            }
        }
        else
        {
            resultSort = columnName + "_asc";
            return new HtmlString($"<a href='/{controller}/index?sortFieldOrder={resultSort}'>{displayName}</a>");
        }
    }

这在过去运行良好(IIS 和 Azure 上的 .net 4.7),但现在代码库是 .Net Core。这是有趣的部分。我总是使用“~/”,这些链接得到正确扩展。所以网址中的网站名称是正确的。

<script src="~/lib/jquery/dist/jquery.min.js"></script>

扩展(正确)为

<script src="/MvcPortal/lib/jquery/dist/jquery.min.js"></script>

但是,如果我在我的 HtmlHelper 代码中添加一个“~”,它不会扩展,而是保持一个“~”。因为它已部署到 IIS,所以我的 url 丢失了一些东西。(适用于 azure 和 iisExpress)

使用 taghelpers 创建的 URL 是正确的:

<a href="/MvcPortal/PSqueries/Create">

但是使用 HtmlHelper 创建的 url 看起来像这样:

<a href='/PSQueries/index?sortFieldOrder=PSQueryName_desc'>Query Name</a>

他们缺少虚拟目录名称....

我尝试了很多,但无法弄清楚如何解决这个问题。我想我正在努力使用波浪号/斜线选项。(https://www.davidhayden.me/blog/asp.net-mvc-4-the-new-tilde-slash-feature-in-razor-2

标签: asp.net-mvcasp.net-coreiis

解决方案


推荐阅读