Server.MapPath 在 ASP.NET MVC 中使用查询字符串

Server.MapPath with query string in ASP.NET MVC

经过大约 15 分钟的 Goooooogling,我找不到解决这个简单问题的方法。有什么帮助吗?

该应用程序托管在网站的 web 子文件夹中,我需要映射一个相对 Uri(这是 RouteController 中的一个 Hello 操作,它接受一个 int 和一个字符串作为参数):

"~/Route/Hello/129?name=kennyzx"

http://myserver/web/myapplication/Route/Hello/129?name=kennyzx

如果我使用

HttpContext.Current.Server.MapPath("~/Route/Hello/129?name=kennyzx");

它抛出异常,因为问号?是一个非法字符。

所以我需要先把Uri分成~/Route/Hello/129?name=kennyzx两部分,然后MapPath取第一部分,Path.Combine拼接[的结果=22=] 和查询字符串。

有更简单的方法吗?

我发现我用错了API,它实际上扩展到我服务器上的真实文件路径!

这就是我想要做的:

我有一堆相对 uris,我想在 Razor 页面中编写一个函数将它们扩展为绝对 uris。

@{
    ViewBag.Title = "Route Testing";
    var link1 = "/Route/Hello/129?name=kennyzx";
    var link2 = "~/Route/Hello/129?name=kennyzx";
}

@functions{
    private static string GetAbsoluteUri(string link)
    { 
        string absoluteUri = HttpContext.Current.Server.MapPath(link);
        return absoluteUri;
    }
}

<h2>Route Testing</h2>

<a href="@link1">@link1</a><br />
<a href="@link2">@link2</a><br />
<a href="@GetAbsoluteUri(@link2)">@link2</a><br />

但是上面的none得到了正确的绝对路径

第一个展开为http://myserver/Route/Hello/129?name=kennyzx,

第二个扩展为http://myserver/web/myapplication/~/Route/Hello/129?name=kennyzx

第三个抛出异常,这就是我问这个问题的原因。

Server.MapPath returns 服务器上的实际路径,如 file:///C:/somefolder/somefile。它不用于解析相对 url。

原来我要找的是 @Url.Content 来解析 Razor 页面中的相对 URL。

@{
    ViewBag.Title = "Route Testing";
    var link1 = "~/Route/Hello/129?name=kennyzx";
}

<h2>Route Testing</h2>

<a href="@Url.Content(@link1)">@link1</a><br />