在网络开发中,基本上任何项目都会涉及到一些xml配置文件,用来存放一些敏感数据,通过这些文件都是不允许客户端浏览的,那么如何禁止用户浏览?直接对有关xml文件的请求做特殊处理即可。在ASP.NET中,HttpHandler用来处理特定类型的请求。HttpHandler定义如下:
public interface IHttpHandler { // Summary: // Gets a value indicating whether another request can use the System.Web.IHttpHandler // instance. // // Returns: // true if the System.Web.IHttpHandler instance is reusable; otherwise, false. bool IsReusable { get; } // Summary: // Enables processing of HTTP Web requests by a custom HttpHandler that implements // the System.Web.IHttpHandler interface. // // Parameters: // context: // An System.Web.HttpContext object that provides references to the intrinsic // server objects (for example, Request, Response, Session, and Server) used // to service HTTP requests. void ProcessRequest(HttpContext context); }
以接口的形式定义,所以自定义类只要实现该接口,即可对特定类型的请求进行特殊处理。就以禁止下载xml文件为例,演示如何使用IHttpHandler。
定义一个CustomHandler类,实现IHttpHandler接口
namespace AspNet.HttpHandler.HttpHandler { public class CustomHandler : IHttpHandler { public bool IsReusable { get { return false; } } public void ProcessRequest(HttpContext context) { //获取文件扩展名 string fileExtension = Path.GetExtension(context.Request.RawUrl); if (fileExtension.Equals(".xml")) { context.Response.ContentType = "text/plain"; context.Response.Write("File not found"); } } } }
现在在Web.config文件中对CustomHandler进行在IIS7中的配置:
<system.webServer> <handlers> <add name="CustomHandler" path="*.xml" verb="GET" type="AspNet.HttpHandler.HttpHandler.CustomHandler"/> </handlers>
</system.webServer>
path:代表处理的请求类型,以后是处理所有的xml文件请求
verb:代表请求的方式,如:GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS
type:处理这些请求的HttpHandler
在IIS6中配置如下:
<system.web> <httpHandlers> <add path="*.xml" verb="GET" type="AspNet.HttpHandler.HttpHandler.CustomHandler"/> </httpHandlers> </system.web>
现在如果再请求xml文件,得到的返回结果是:File not found