繁体   English   中英

ASP.NET MVC中带有查询字符串的Server.MapPath

[英]Server.MapPath with query string in ASP.NET MVC

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

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

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

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

如果我用

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

因为问号会引发异常? 是非法字符。

所以,我需要先开放的我们分成两个部分~/Route/Hello/129?name=kennyzx ,然后MapPath需要的第一部分,和Path.Combine连击的结果MapPath查询字符串。

有没有更简单的方法可以做到这一点?

我意识到我使用了错误的API,实际上它会扩展到服务器上的真实文件路径!

这就是我想要做的:

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

@{
    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 />

但是以上方法均无法获得正确的绝对路径。

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

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

第三个抛出异常,这就是为什么我要问这个问题。

Server.MapPath返回服务器上的实际路径,例如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 />

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM