近期做了一个后台管理网站,后台页面都是Html页面,里面再通过ajax访问后台服务。要做到比较好的用户体验,即:如果用户没有登录或没有权限马上调到登录页面,而不是等到页面加载后再ajax时判断是否登录或权限再做跳转(这样给用户体验不好)。该如果实现呢?

首先想到的是自定义httpModule,拦截html请求,做权限认证。

本地调试没有问题,发布到IIS6后发现包含html文件再内的所有的静态资源都没有经httpModule处理,后来发现静态资源 IIS6直接返回,不通过asp.net管道处理。IIS7的集成模式默认所有的请求都会进入asp.net管道。这个问题如何解决呢?答案是通过配置IIS和web.config配置文件实现静态资源由asp.net管道处理。

一、首先iis6中右键站点属性->主目录->配置->应用程序配置

我用的是.net4.0,可执行文件填写的是c:\windows\microsoft.net\framework\v4.0.30319\aspnet_isapi.dll,如果是2.0填写2.0的aspnet_isapi.dll即可。

动作可根据自己的需要定制。GET、POST、PUT、DELETE等

确认文件是否存在不勾选

二、web.config配置

1、system.web节点下的httpHandlers添加html处理器映射

  1. <system.web>
  2. <httpHandlers>
  3. <add verb="GET" path="*.html" type="System.Web.UI.PageHandlerFactory"/>
  4. </httpHandlers>
  5. </system.web>

2、system.web节点下的httpHandlers添加html编辑映射

  1. <system.web>
  2. <compilation>
  3. <buildProviders>
  4. <add extension=".html" type="System.Web.Compilation.PageBuildProvider"/>
  5. </buildProviders>
  6. </compilation>
  7. </system.web>

3、自定义httpModule过滤html,做相关功能验证

  1. <system.web>
  2. <httpModules>
  3. <add name="accountModule" type="tracePlatForm.WebApp.modules.accountModule"/>
  4. </httpModules>
  5. </system.web>

httpModule关键代码:

  1. public class accountModule : IHttpModule,IReadOnlySessionState
  2. {
  3. public void Dispose()
  4. {
  5. }
  6. public void Init(HttpApplication context)
  7. {
  8. context.BeginRequest += new EventHandler(checkLogin);
  9. }
  10. private void checkLogin(object sender, EventArgs e)
  11. {
  12. //自己的处理
  13. }
  14. }

至此所有必须的配置都已完成,你的站点可以过滤html文件请求了。

随机推荐

  1. 推荐超实用的8款jQuery插件

    这里有8款超实用的jQuery插件供大家参考使用,除了jQuery特效的详细使用方法以外,我们还有在线演示和下载及教程,希望对大家有所帮助! 超棒的视差效果jQuery插件 - FractionSli ...

  2. 一些C++11语言新特性 - Uniform Initialization

    1. Uniform Initialization , , }; std::vector<, , , , , , }; std::vector<std::string> cities ...

  3. html中嵌入flvplayer.swf播放器,播放视频

    只需要改动红色的代码: <object classid='clsid:D27CDB6E-AE6D-11cf-96B8-4445535411111' codebase='http://downlo ...

  4. UNIX网络编程读书笔记:readv和writev函数

    这两个函数类似于read和write,不过readv和writev允许单个系统调用读入到或写出自一个或多个缓冲区.这些操作分别称为分散读(scatter read)和集中写(gather write) ...

  5. UIScrollView 循环滚动,代码超简单

    如今非常多应用里面多多少少都用到了循环滚动,要么是图片.要么是view,或者是其它,我总结一下,写了个demo分享给大家. 先看代码之后在讲原理: 1.创建一个空的项目(这个我就不多说了). 2.加入 ...

  6. C#调取java接口

    1. public class APIRequest    {       //public static string commonUrl = @"http://192.168.2.186 ...

  7. HttpSession 和URLRewriting

    在上面使用Cookie技术存储会话信息的时候发现Cookie存储的数据有限,而且每次需要客户端浏览器携带数据,导致网络的负载过大.因此如果需要存储相对大量的数据,那么可以直接将数据存储在服务器端,这样 ...

  8. EMQ学习---客户链接资源消耗

    Erlang进程消耗EMQ对客户端链接使用链接进程(emqtt_client)和session进程(emqtt_session)分开的策略. 当一个mqtt的客户端连接到EMQ的服务器上的时候,首先会 ...

  9. zoj 2921 Stock(贪心)

    Optiver sponsored problem. After years of hard work Optiver has developed a mathematical model that ...

  10. C++加载dll失败或显示乱码

    右键项目-属性-字符集-使用多字节字符集