近期做了一个后台管理网站,后台页面都是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. UVALive 4857 Halloween Costumes

    区间dp.对于最左边的点: 1.在该点穿的衣服只有该点用的到,即穿上就脱下.所以dp[ l ][ r ] = min(dp[ l + 1][ r ] + 1, dp[ l ][ r ]). 2.衣服仍 ...

  2. 【转】IT新人如何快速成长

    主动积极 主动积极包括很多方面了,主动学习.主动思考.主动承担责任等等.我觉得主动性很重要,如果你能做到这一点,那么肯定会把工作做的很好的. 学会学习 公司不是学校,需要改变由老师灌输知识的学习方式. ...

  3. pomelo生命周期回调和组件加入

    一 生命周期回调 生命周期回调可以让开发人员在不同类型的server生命周期中进行详细操作. 提供的生命周期回调函数包含:beforeStartup,afterStartup,beforeShutdo ...

  4. vim中翻页的命令

      整页翻页 ctrl-f ctrl-b f就是forword b就是backward 翻半页 ctrl-d ctlr-u d=down u=up 滚一行 ctrl-e ctrl-y zz 让光标所杂 ...

  5. excel 如何为列添加指定内容(字符串)

      excel 如何为列添加指定内容(字符串) CreateTime--2018年5月26日17:52:32 Author:Marydon 1.情景展示 D列的值需要获取B列的值并且在后面统一加上12 ...

  6. ubuntu 设置计划任务

    非常简便: crontab -e 以下是我的执行过程,输入命令后,会让我选择一个编辑器,我选的是2,因为后边写着easiest,最简单的. liuyx@myubuntu:/$ crontab -e n ...

  7. ip段/数字,如192.168.0.1/24的意思是什么?(转)

    ip段/数字,如192.168.0.1/24的意思是什么? 踩踩 0作者:Admin 发表日期:2013-10-31 复制链接 收藏 首先来了解一下二进制的转换知识: 二进制数转换成十进制数 二进制的 ...

  8. jquery切换class

    <ul class="nva_sele_txt" id="">            <a href="#" class= ...

  9. 关于python 中的 sys.argv 的使用方法

    sys.argv是获取在cmd运行python文件的时候输入的命令行参数,呈现的数据结构是列表的格式 1.用pacharm时运行时的结果是: 输出结果: 2.当我在cmd中输入指令      debu ...

  10. 摘:C++日期时间与字符串间的转换

    VC6中 CString sTime = _T("2007-10-26 13:20:30"); char *charTime = (LPSTR)(LPCTSTR)sTime; CS ...