惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 叶小钗
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
J
Java Code Geeks
The GitHub Blog
The GitHub Blog
博客园_首页
U
Unit 42
人人都是产品经理
人人都是产品经理
Engineering at Meta
Engineering at Meta
IT之家
IT之家
G
Google Developers Blog
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
Jina AI
Jina AI
有赞技术团队
有赞技术团队
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
小众软件
小众软件
H
Help Net Security

博客园 - 廖勇军

关于c++的头文件依赖 增强资源管理器右键功能,含源代码 VC中结构体的内存布局 进程间共享句柄三种方式 SocanCode连接Oracle的方法 SocanCode7之模板编写 不用再纠结反射影响效率了 javascript总结 IIS7.0中使用MVC3,静态页正常,其它404 一起来灭掉IE6! iis express感觉还不错 关于sqlite使用entity framework的布署问题 - 廖勇军 - 博客园 负margin实现div的左右排版 原来Jquery.load的方法可以一直load下去 错误1067进程意外终止 关于省市联动的问题想法 javac编译多个带package文件 远程服务器返回了错误 NOTFOUND Java程序放到Linux上出现的问题
ashx的使用
廖勇军 · 2011-11-07 · via 博客园 - 廖勇军

1、必须实现IHttpHandler(如果需要使用Session,则还需要实现IRequiresSessionState接口,这只是个标记接口,实际上没有方法),完成方法public void ProcessRequest(HttpContext context)。例如提供一个文件下载:

        

public void ProcessRequest(HttpContext context)
        {
            //context.Response.ContentType = ".*";
            
//context.Response.Charset = "utf-8";//如果要直接打开则注释以下部分,或把"attachment"要改为“inline”
            string downName = "下载时的文件名.txt";
            context.Response.AddHeader("content-disposition",
                string.Format("attachment; filename={0}", context.Server.UrlEncode(downName)));

            //输出原文件
            string srcPath = context.Server.MapPath("~/readme.txt");
            context.Response.WriteFile(srcPath);
        }

2、在web.config中,加入以下代码:

   

<httpHandlers>
      <remove verb="*" path="*.asmx"/>
      <add verb="*" path="ashx/IHttpHandler1.ashx" type="TestJavascript.IHttpHandler1, TestJavascript" />
      <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
    </httpHandlers>

3、如果是IIS7,则Web.config中还需要加入:

  

<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true"/>
    <handlers>
      <add verb="*" name="IHttpHandler1" path="ashx/IHttpHandler1.ashx" type="TestJavascript.IHttpHandler1, TestJavascript" />
    </handlers>
  </system.webServer>

4、如果是MVC,需要在Global.asax文件中忽略路由:

        

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.("{resource}.axd/{*pathInfo}");
            routes.IgnoreRoute("{folder}/{resource}.ashx/{*pathInfo}");

            routes.MapRoute(
                "Default"// Route name
                "{controller}/{action}/{id}"// URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );
        }

接下来,就可以使用:http://localhost/ashx/IHttpHandler1.ashx来访问了