В моем случае я делал это:
double a = (double) (MAX_BANDWIDTH_SHARED_MB/(qCount+1));
Вместо «правильного»:
double a = (double)MAX_BANDWIDTH_SHARED_MB/(qCount+1);
Обратите внимание на круглые скобки!
Насколько я знаю, нет никакого метода, чтобы сделать то, что Вы хотите; по крайней мере, не непосредственно. Я сохранил бы 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);
}
}
Я принял ответ Fredriks, как это, кажется, решает проблему с наименьшим количеством усилия однако, объект Запроса, кажется, не содержит метод ResolveUrl. К этому можно получить доступ через Объект страницы или объект управления Изображения:
myImage.ImageUrl = Page.ResolveUrl(photoURL);
myImage.ImageUrl = myImage.ResolveUrl(photoURL);
альтернатива при использовании статического класса, как я, должна использовать VirtualPathUtility:
myImage.ImageUrl = VirtualPathUtility.ToAbsolute(photoURL);
Возможно, это не лучший способ, но он работает.
// Here is your path
String p = photosLocation + "whatever.jpg";
// Here is the page address
String pa = Page.Request.Url.AbsoluteUri;
// Take the page name
String pn = Page.Request.Url.LocalPath;
// Here is the server address
String sa = pa.Replace(pn, "");
// Take the physical location of the page
String pl = Page.Request.PhysicalPath;
// Replace the backslash with slash in your path
pl = pl.Replace("\\", "/");
p = p.Replace("\\", "/");
// Root path
String rp = pl.Replace(pn, "");
// Take out same path
String final = p.Replace(rp, "");
// So your picture's address is
String path = sa + final;
Редактирование: хорошо, кто-то отметил как не полезный. Некоторое объяснение: выберите медосмотр путь текущей страницы, разделите его на две части: сервер и каталог (как c:\inetpub\whatever.com\whatever) и название страницы (как/Whatever.aspx). Физический путь изображения должен содержать путь сервера, таким образом, "substract" их, покидая только путь изображения относительно сервера (как: \design\picture.jpg). Замените обратные косые черты наклонными чертами и добавьте его к URL сервера.
Насколько я знаю, что нет никакой единственной функции, которая делает это (возможно, Вы искали инверсию MapPath?). Я хотел бы знать, существует ли такая функция. До тех пор я просто взял бы имя (имена) файла, возвращенное GetFiles, удалил бы путь и предварительно ожидал бы корень URL. Это может быть сделано в общем.
Я думаю, что это должно работать. Это могло бы быть выключено на наклонных чертах. Не уверенный, если они необходимы или нет.
string url = Request.ApplicationPath + "/" + photosLocation + "/" + files[0];