基本上我有一些代码来检查特定的目录,看看是否有图像,如果是,我想将图像的URL分配给ImageControl.
if (System.IO.Directory.Exists(photosLocation)) { string[] files = System.IO.Directory.GetFiles(photosLocation, "*.jpg"); if (files.Length > 0) { // TODO: return the url of the first file found; } }
Dementic.. 16
这是我用的:
private string MapURL(string path) { string appPath = Server.MapPath("/").ToLower(); return string.Format("/{0}", path.ToLower().Replace(appPath, "").Replace(@"\", "/")); }
Fredrik Kals.. 13
据我所知,没有办法做你想做的事情; 至少不是直接的.我将它存储photosLocation
为相对于应用程序的路径; 例如:"~/Images/"
.这样,您可以使用MapPath获取物理位置,并ResolveUrl
获取URL(有一些帮助System.IO.Path
):
string photosLocationPath = HttpContext.Current.Server.MapPath(photosLocation); if (Directory.Exists(photosLocationPath)) { string[] files = Directory.GetFiles(photosLocationPath, "*.jpg"); if (files.Length > 0) { string filenameRelative = photosLocation + Path.GetFilename(files[0]) return Page.ResolveUrl(filenameRelative); } }
@Fredrik正如Jared指出的那样,HttpRequest对象没有这个方法.它可以在Page对象或Web控件对象中找到.你可以编辑你的答案来反映这个吗? (12认同)
我在任何.Net版本的文档中都找不到HttpRequest的ResolveUrl成员.你在使用ASP.Net MVC吗? (8认同)
`ResolveUrl`不是`System.Web.HttpRequest`的成员 (7认同)
Ross Presser.. 11
所有这些答案的问题在于它们不考虑虚拟目录.
考虑:
Site named "tempuri.com/" rooted at c:\domains\site virtual directory "~/files" at c:\data\files virtual directory "~/files/vip" at c:\data\VIPcust\files
所以:
Server.MapPath("~/files/vip/readme.txt") = "c:\data\VIPcust\files\readme.txt"
但是没有办法做到这一点:
MagicResolve("c:\data\VIPcust\files\readme.txt") = "http://tempuri.com/files/vip/readme.txt"
因为无法获得完整的虚拟目录列表.
这是我用的:
private string MapURL(string path) { string appPath = Server.MapPath("/").ToLower(); return string.Format("/{0}", path.ToLower().Replace(appPath, "").Replace(@"\", "/")); }
据我所知,没有办法做你想做的事情; 至少不是直接的.我将它存储photosLocation
为相对于应用程序的路径; 例如:"~/Images/"
.这样,您可以使用MapPath获取物理位置,并ResolveUrl
获取URL(有一些帮助System.IO.Path
):
string photosLocationPath = HttpContext.Current.Server.MapPath(photosLocation); if (Directory.Exists(photosLocationPath)) { string[] files = Directory.GetFiles(photosLocationPath, "*.jpg"); if (files.Length > 0) { string filenameRelative = photosLocation + Path.GetFilename(files[0]) return Page.ResolveUrl(filenameRelative); } }
所有这些答案的问题在于它们不考虑虚拟目录.
考虑:
Site named "tempuri.com/" rooted at c:\domains\site virtual directory "~/files" at c:\data\files virtual directory "~/files/vip" at c:\data\VIPcust\files
所以:
Server.MapPath("~/files/vip/readme.txt") = "c:\data\VIPcust\files\readme.txt"
但是没有办法做到这一点:
MagicResolve("c:\data\VIPcust\files\readme.txt") = "http://tempuri.com/files/vip/readme.txt"
因为无法获得完整的虚拟目录列表.
我已经接受了Fredriks的答案,因为它似乎以最少的努力解决了问题,但是Request对象似乎并没有使用ResolveUrl方法.这可以通过Page对象或Image控件对象访问:
myImage.ImageUrl = Page.ResolveUrl(photoURL); myImage.ImageUrl = myImage.ResolveUrl(photoURL);
如果你像我一样使用静态类,另一种方法是使用VirtualPathUtility:
myImage.ImageUrl = VirtualPathUtility.ToAbsolute(photoURL);