近期做了一个后台管理网站,后台页面都是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. 微信小程序 - 五星评分(含半分)

    转载自:http://blog.csdn.net/column/details/13721.html     演示:     下载:小程序-星级评论.zip  

  2. PHP 5 时区

    PHP 5 时区 PHP 支持的时区 下面是 PHP 支持的时区的完整列表,这些对一些 PHP 日期函数很有用. 非洲 美洲 南极洲 北冰洋 亚洲 大西洋 大洋洲 欧洲 印度洋 太平洋 非洲 Afri ...

  3. Uni2D Unity4.3 2D Skeletal Animation

    http://www.cnblogs.com/zhaoqingqing/p/3602253.html 中文教程:参照 kakashi的CSDN博客 http://blog.csdn.net/kakas ...

  4. nuget命令的用法:

    nuget命令的用法: Install-Package 安装包   -Version 4.3.1 参数指定版本 Uninstall-Package 卸载包 Update-Package 更新包 Get ...

  5. pdf+iphone+wechat

    可能很多人要问,为啥标题取这个名字. 因为今天在这个上面踩了太多坑.. 我们的需求其实很简单.做一个页面,把pdf文档嵌进去,在线显示. 如此需求,放在PC上chrome浏览器,一个embed标签就搞 ...

  6. C#调用windows api控制打印机 状态获取 打印 自定义纸张 完整版

    using System; using System.Text; using System.Runtime.InteropServices; using System.Security; using ...

  7. Mysql Communications link failure 问题的解决

    问题现象 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure The last p ...

  8. angularjs requeirjs配置相关

    尝试了网上的yeoman generator 生成的脚手架项目不甚理想 npm install -g generator-angular-require yo angular-require 就不用那 ...

  9. github get 请求指定页面的代码

    https://raw.githubusercontent.com/dragon8github/wx-h5/master/push.sh

  10. mysql 导入导出数据库、数据表的方法

    mysql 导入导出数据库.数据表的方法. Linux操作系统中,均在控制台下操作.1,导入数据库:前提:数据库和数据表要存在(已经被创建)(1)将数据表 test_user.sql 导入到test ...