当前位置:编程学习 > C#/ASP.NET >>

asp.net 里的HttpHandler图片隐藏问题

今天看到一个网址http://www.5x-space.cn/page/e9a1b5e99da2e7a4bae4be8b.aspx
这里的图片他是隐藏地址,看不到具体的地址。
然后我在网站上找了些相关的资料看到了这个地址
大家也看一下:http://blog.moozi.net/read-138.html这个参考资料
我也创建了一个.cs文件CustomHandler.cs放在了asp_code文件夹里,
也建了一个.aspx文件里面加了一个图片,但是怎么也显示器不出这个图片来,我觉得好像是在web.config里的设置有问题。

<httpHandlers> 
   <add verb="*" path="image.axd" type="MzMobile.Web.HttpHandlers.ImageHandler, MzMobile.Web" validate="false"/> 
</httpHandlers>

是不是 "MzMobile.Web.HttpHandlers.ImageHandler, MzMobile.Web"设置有问题。请高手们帮我解决一下。谢谢。 --------------------编程问答-------------------- type="MzMobile.Web.HttpHandlers.ImageHandler, MzMobile.Web"

有没有这个MzMobile.Web这个DLL,
--------------------编程问答-------------------- 那是不是还要生成一个dll文件。
这个dll文件怎么生成呢?就针对一个cs文件应该怎么生成?
请高手指点 --------------------编程问答-------------------- 如果你是在一个解决方案下做的的话,后面的", MzMobile.Web"就可以不用加了.
MzMobile.Web.HttpHandlers.ImageHandler
是你要写一个ImageHandler类,它必须实现IHttpHandler接口
要显示图片的话,它还得把一个图片数据写到响应流. --------------------编程问答-------------------- 学习了 --------------------编程问答-------------------- 就一个cs文件

新建一个类库项目中,然后把文件放进去,进行编译就行了

--------------------编程问答--------------------
namespace CustomHander
{
    /// <summary>
    /// CustomHandler 的摘要说明
    /// </summary>
    public class ImageHandler : IHttpHandler
    {
        public bool IsReusable
        {
            get { return false; }
        }
        public void ProcessRequest(HttpContext context)
        {
            if (!string.IsNullOrEmpty(context.Request.QueryString["picture"]))
            {
                string fileName = context.Request.QueryString["picture"];
                OnServing(fileName);
                try
                {
                    string folder = "App_Data/Picture/";
                    FileInfo fi = new FileInfo(context.Server.MapPath(folder) + fileName);

                    if (fi.Exists &&
                        fi.Directory.FullName.ToUpperInvariant().Contains(
                            Path.DirectorySeparatorChar + "PICTURE"))
                    {
                        //context.Response.Cache.SetCacheability(HttpCacheability.Public); 
                        //context.Response.Cache.SetExpires(DateTime.Now.AddYears(1)); 

                        //if (Utils.SetConditionalGetHeaders(fi.CreationTimeUtc)) 
                        //    return; 

                        int index = fileName.LastIndexOf(".") + 1;
                        string extension = fileName.Substring(index).ToUpperInvariant();

                        // Fix for IE not handling jpg image types 
                        if (string.Compare(extension, "JPG") == 0)
                            context.Response.ContentType = "image/jpeg";
                        else
                            context.Response.ContentType = "image/" + extension;

                        context.Response.TransmitFile(fi.FullName);
                        OnServed(fileName);
                    }
                    else
                    {
                        OnBadRequest(fileName);
                        context.Response.ContentType = "image/gif";
                        context.Response.TransmitFile(context.Server.MapPath(folder) + "nophoto.gif");
                        //context.Response.Redirect(Utils.AbsoluteWebRoot + "error404.aspx"); 
                    }
                }
                catch (Exception ex)
                {
                    OnBadRequest(ex.Message);
                    //context.Response.Redirect(Utils.AbsoluteWebRoot + "error404.aspx"); 
                }
            }
        }

        /**/
        /// <summary> 
        /// Occurs before the requested image is served. 
        /// </summary> 
        public static event EventHandler<EventArgs> Serving;
        private static void OnServing(string file)
        {
            if (Serving != null)
            {
                Serving(file, EventArgs.Empty);
            }
        }

        /**/
        /// <summary> 
        /// Occurs when a file is served. 
        /// </summary> 
        public static event EventHandler<EventArgs> Served;
        private static void OnServed(string file)
        {
            if (Served != null)
            {
                Served(file, EventArgs.Empty);
            }
        }

        /**/
        /// <summary> 
        /// Occurs when the requested file does not exist. 
        /// </summary> 
        public static event EventHandler<EventArgs> BadRequest;
        private static void OnBadRequest(string file)
        {
            if (BadRequest != null)
            {
                BadRequest(file, EventArgs.Empty);
            }
        }
    }
}

这是我写的那个CustomHandler.cs文件。
在web.config里我是这样写的。
<configuration>
<appSettings/>
<connectionStrings/>
<system.web>
<httpHandlers>
<add verb="*" path="image.axd" type="CustomHandler.ImageHandler, CustomHandler" validate="true"/>
</httpHandlers>
</system.web>
</configuration>

在.aspx文件里我是这样写的。
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <img src="/image.axd?picture=IP.jpg" /></div>
    </form>
</body>
</html>

但是他说我
未能加载类型“CustomHandler.ImageHandler”。
这是为什么?我在bin里也放了CustomHandler.dll文件,也添加了引用。
他生成了一个CustomHandler.dll.refresh文件。为什么还报呢?
是不是我那里出错了。 --------------------编程问答-------------------- 问题已经解决了。原来是namespace CustomHander
的命名问题。要改为CustomHandler
又发现一个问题就是
string folder = "App_Data/Picture/";
这个文件路径只能在这里,不能在根目录下,不然会读不出来。 --------------------编程问答-------------------- 哈哈哈 --------------------编程问答-------------------- 我靠,主要是楼上太懒了哈
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,