Я пытаюсь написать обработчик HTTP в C #, который загружает изображения с сетевого диска и записывает их в ответ HTTP. В настоящее время это не работает для меня, так как я продолжаю получать ответы HTTP 302, что приводит к отображению испорченного файла. Ниже мой обработчик HTTP. Права доступа были установлены, поэтому анонимные пользователи имеют доступ на чтение к общему ресурсу, но в идеале это не должно быть постоянным.
public class SecCamImage : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
Configuration config = WebConfigurationManager.OpenWebConfiguration("~/Web.Config");
KeyValueConfigurationElement setting = null;
if(config.AppSettings.Settings.Count > 0)
{
setting = config.AppSettings.Settings["CameraBaseURL"];
}
if(setting != null)
{
string baseURL = setting.Value;
string location = context.Request["location"].ToString();
string camera = context.Request["camera"].ToString();
string image = context.Request["image"].ToString();
if (!(string.Compare(image, "no-image.jpg", true) == 0))
{
if (!string.IsNullOrEmpty(location) && !string.IsNullOrEmpty(camera) && !string.IsNullOrEmpty(image))
{
string fullPath = string.Format(baseURL, location, camera, image);
System.IO.FileInfo imageFile = new System.IO.FileInfo(fullPath);
if (imageFile.Exists)
{
if (context.User.Identity.IsAuthenticated)
{
context.Response.ContentType = "image/jpeg";
context.Response.WriteFile(imageFile.FullName);
context.Response.End();
}
}
}
}
else
{
context.Response.ContentType = "image/jpeg";
context.Response.WriteFile(image);
context.Response.End();
}
}
}
public bool IsReusable
{
get { return false; }
}
}
URL-адрес, сохраненный в файле конфигурации, имеет следующую структуру: -
\\\\host\\directory\\{0}\\{1}\\{2}
{0}
и {1}
- это каталоги, а {2}
- это файл.