Richard Deeming
Необработанный URL-адрес определяется как часть URL-адреса, следующая за информацией о домене. В строке URL-адреса http://www.contoso.com/articles/recent.aspx, необработанный URL-адрес-это /articles/recent.aspx. Необработанный URL-адрес включает строку запроса, если она присутствует.
Итак, учитывая Ваш URL-адрес:
http://localhost:55558/ip-myserver/d$/Websites/mysites.net/pdfFiles/archive/Example.pdf
то
RawUrl
будет:
/ip-myserver/d$/Websites/mysites.net/pdfFiles/archive/Example.pdf
Это будет решено относительно текущего пути. Так что если ваше приложение находится на диске
C:
, он будет искать файл, расположенный в:
C:\ip-myserver\d$\Websites\mysites.net\pdfFiles\archive\Example.pdf
Похоже, вы пытаетесь загрузить файл из UNC-пути, который должен быть:
\\ip-myserver\d$\Websites\mysites.net\pdfFiles\archive\Example.pdf
Попробуйте что-нибудь вроде этого:
public void ProcessRequest(HttpContext context)
{
dynamic emp = context.Session["EmpID"];
if (emp == null || string.IsNullOrEmpty(emp))
{
HttpContext.Current.Response.StatusCode = 404;
HttpContext.Current.Response.Flush();
return;
}
Uri path;
if (!Uri.TryCreate("file:/" + context.Request.RawUrl, UriKind.Absolute, out path))
{
HttpContext.Current.Response.StatusCode = 404;
HttpContext.Current.Response.Flush();
return;
}
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.ContentType = "application/pdf";
context.Response.AddHeader("Content-Disposition", "attachment");
context.Response.TransmitFile(path.LocalPath);
context.Response.Flush();
context.Response.Clear();
context.ApplicationInstance.CompleteRequest();
}
NB: Вам нужно будет убедиться, что ваш пул приложений работает от имени пользователя, имеющего разрешение на чтение файлов из пути UNC. Вероятно, вам придется избегать использования общих ресурсов администратора по умолчанию (
d$
), а вместо этого переключитесь на использование определенных общих папок.
s23user
У меня есть доступ к пути \\networkShared\SHARED\john\ApplicationReview\ExeAppSchedule1.pdf
Запрошенный URL-адрес
http://localhost:8080/networkShared/SHARED/john/ApplicationReview/ExeAppSchedule1.pdf
Физический Путь
C:\TestPublish\TestLib\networkShared\SHARED\john\ApplicationReview\ExeAppSchedule1.pdf
вот как выглядит моя веб-конфигурация:
<конфигурация>
<appsettings>
&ЛТ;добавить ключ="pdfFile" значение="\\networkShared\общая\Джон\\ApplicationReview ExeAppSchedule1.PDF-файл " /&ГТ;
&ЛТ;система.веб&ГТ;
<компиляция targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<identity impersonate="true" />
&ЛТ;система.модели&ГТ;
<компиляторы>
&ЛТ;компилятор языка="в C#;CS, который используется CSharp" расширение=".ЦС" тип="Майкрософт.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform, версия=1.0.0.0, культуры=нейтральный, значения PublicKeyToken=31bf3856ad364e35" предупреждение Уровень="4" компилятора параметры="/langversion:6 /ключевого слова:1659;1699;1701" /&ГТ;
&ЛТ;компилятор языка="ВБ;ВБС;на языке VisualBasic;по VBScript" расширение=".ВБ" тип="Майкрософт.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform.VBCodeProvider, Microsoft.граф CodeDOM.Услуги поставщиков.DotNetCompilerPlatform, версия=1.0.0.0, культуры=нейтральный, значения PublicKeyToken=31bf3856ad364e35" предупреждение Уровень="4" компилятора параметры="/langversion:14 /ключевого слова:41008 /определить:_MYTYPE=\"веб\" /optionInfer+" /&ГТ;
&ЛТ;система.веб-сервер&ГТ;
<directoryBrowse enabled="true" />
<обработчики>
&ЛТ;добавить имя="PdfFile" путь="*.формат PDF" глагол="*" тип="CustomFileHandler.CustomFileHandler" resourceType="File" предварительное условие="integratedMode" />
&ЛТ;добавить имя="JpgFile" путь="*.форматы jpg" глагол="*" тип="CustomFileHandler.CustomFileHandler" resourceType="File" предварительное условие="integratedMode" />
F-ES Sitecore
Возможно, у вас есть доступ к этому файлу, но есть ли учетная запись, под которой работает ваш код? Если вы не изменили пользователя в IIS, это не произойдет. На вашем месте я бы скачал файл по протоколу http (используйте WebClient или что-то подобное) и затем отправил его клиенту, а не пытался бы напрямую получить доступ к файловой системе. Доступ к файловой системе другой машины осуществляется через asp.net это гораздо больше хлопот, если вы можете получить доступ к файлу через http.
s23user
Как мне загрузить файл через http, не могли бы вы, пожалуйста, провести меня через него?
s23user
Я проверил эту ссылку, но не понял, как и что я передаю в качестве url-адреса при создании веб-запроса, поскольку файл, который я пытаюсь загрузить, находится на файловом сервере, но не на веб-сервере.