C# WebForms应用程序中的秘密图像路径

C# WebForms应用程序中的秘密图像路径,c#,asp.net,webforms,.net-3.5,C#,Asp.net,Webforms,.net 3.5,我正在使用Visual Studio 2008(.NET framework 3.5),目前正在将图像上载到C#中的ASP.NET WebForms应用程序。如果有人复制了我的图像url并在新窗口/选项卡中打开,那么我的站点的完整目录结构就会显示给用户,比如http://domain.name/images/companylogo/logo599.jpg 我想隐藏我的目录结构并显示图像路径,如: public class FileHandler : IHttpHandler { publ

我正在使用Visual Studio 2008(.NET framework 3.5),目前正在将图像上载到C#中的ASP.NET WebForms应用程序。如果有人复制了我的图像url并在新窗口/选项卡中打开,那么我的站点的完整目录结构就会显示给用户,比如
http://domain.name/images/companylogo/logo599.jpg

我想隐藏我的目录结构并显示图像路径,如:

public class FileHandler : IHttpHandler
{
    public void ProcessRequest(HttpContext context)
    {
        var path = GetPath(context.Request.Params["Id"]);
        context.Response.ContentType = "image/jpeg";
        context.Response.WriteFile(path);
    }
}


为了隐藏我的站点目录结构,我将imageshack API配置为上载图像,但要求与上面的路径类似。我不知道如何管理上述路径格式。

您需要将图像放在用户无法访问的文件夹中,并通过处理程序提供图像。要使文件夹不可访问,您可以在该文件夹中放置一个
web.config
文件,其中包含以下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="DenyAll" path="*.*" verb="*" 
                 type="System.Web.HttpForbiddenHandler" />
        </handlers>
    </system.webServer>
</configuration>

这不是一个精确的实现,这只是一个想法。要做到这一点的步骤

  • 创建表(数据库)或xml文件,为图像创建唯一的id和路径
  • 比如ID=1和path=“~/folder/file.jpg”
  • 创建一个将提供映像作为响应的通用处理程序
  • 如果必须调用代码为1的映像“imagehandler?id=1”,请使用如下映像路径
  • 图像处理程序可以如下所示

     public class ImageHandler : IHttpHandler
     {
        public void ProcessRequest(HttpContext context)
        {
            var imageId = QueryString.getValueOf("ID");
            var imagePath="";//calculate for database or xml file
            var originalImage = Image.FromFile (context.Server.MapPath(imagePath);
            originalImage.Save(context.Response.OutputStream, ImageFormat.Jpeg);  
            context.Response.ContentType = "image/gif"; //or any type
         }
      }
    
    并将图像路径提供给具有图像id的处理程序

    一些有用的链接


  • 最简单的方法是创建一个.ashx处理程序,用于处理对图像的请求。而不是打电话

    http://domain.name/images/companylogo/logo599.jpg
    
    你可以用

    http://domain.name/photo.ashx?id=599
    
    代码示例:


    如果您使用imageshack API或任何其他东西来调整大小,等等。或者图像位于远程服务器上,那么您可以按照所示对处理程序进行编码。最后,我找到了某种符合我要求的东西。检查下面的链接,可能对某人有所帮助。

    感谢您的及时回复@chrfin。实际上,我的网站的用户可以发布图片。那么,您建议的配置将产生什么结果。我不知道处理程序。图像来自哪里并不重要。如果您将它们放在带有
    web.config
    的文件夹中,就像在我的示例中一样,它们无法直接访问,您需要获得
    路径
    以某种方式为它们提供服务器,就像将它们存储在数据库中一样。@shekhar您能为我提供一个演示链接以获取详细说明吗?你说的事对我来说是新鲜事。