现在的位置: 首页 > 综合 > 正文

ashx文件中代码编译进DLL的解决方法,完美

2013年01月31日 ⁄ 综合 ⁄ 共 1606字 ⁄ 字号 评论关闭

我在网上看到有人说ashx页面发布后代码都在里面,不怎么安全。于是简单百度了下,看到有人把ashx代码放进共享里达到被编译的效果,其实不用这样,这样如果文件一多,管理会很麻烦。ashx的好处不多说,比aspx效率要高。其实要把代码编译进dll,很简单,用到分部类就行

我们首先看看原来的ashx代码

有一个ashx文件名叫做 CheckLogin.ashx,是用来判断登陆的,它的代码文件相应的就是CheckLogin.ashx.cs

我们先看看下面CheckLogin.ashx.cs中的代码(虽然是单独的.cs文件,但是编译后其实还是在ashx文件中)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;

namespace WebUI.Handler
{
    /// <summary>
    /// CheckLogin 的摘要说明
    /// </summary>
    public  class CheckLogin : IHttpHandler
    {
            private void AddUserOnLine(HttpContext context)
        {
            context.Response.ContentType = "text/plain";

        }

        //内部处理程序云云....

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
       
   

用这样的方式写,编译网站后代码全在ashx文件里,记事本一打开全看见了。

 

于是来个小小改动,看下面 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;

namespace WebUI.Handler
{
    /// 
    /// CheckLogin 的摘要说明
    /// 
    public  partial  class CheckLogin : IHttpHandler    
    {

        注意上面用到了partial关键字,而这里的代码全剪切到新建的类里了,这边留空就行
   }
}

加了 partial ,表示这是分部类。

然后再新建一个同名的类文件,CheckLogin.cs ,其中using全照搬,反正里面结构完全一样,要处理的逻辑写这里就行。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;

namespace WebUI.Handler
{
    public partial class CheckLogin
    {

        public void ProcessRequest(HttpContext context)
        {

            context.Response.ContentType = "text/plain";            
        }

	//这里也用到了partial关键字,表示这个类是CheckLogin的一部分,然后写你的业务逻辑吧,这边的代码会被编译进dll中。
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

代码写新建类文件中,搞定,编译看看,ashx文件中没东西啦!全进dll了。

编译完成之后我们打开CheckLogin.ashx文件看到,里面就一行,大小1KB,完美

<%@WebHandler Language="C#" CodeBehind="CheckLogin.ashx.cs" Class="WebUI.Handler.CheckLogin"%>

//除了这行,其他什么都没了。

抱歉!评论已关闭.