ashx文件使用


在項目開發中,只要用到ajax,一般都少不了使用vs的一般處理程序(ashx文件),下面詳細介紹下該文件:

一般處理程序(HttpHandler)是·NET眾多web組件的一種,ashx是其擴展名。一個httpHandler接受並處理一個http請求,類比於Java中的servlet。類比於在Java中需要繼承HttpServlet類,在。net中需要實現IHttpHandler接口,這個接口有一個IsReusable成員,一個待實現的方法ProcessRequest(HttpContextctx) 。程序在processRequest方法中處理接受到的Http請求。成員IsReusable指定此IhttpHnadler的實例是否可以被用來處理多個請求。
.ashx程序適合產生供 瀏覽器處理的、不需要 回發處理的數據格式,例如用於生成 動態圖片動態文本等內容。
上面一段很熟悉,就是百度百科里對ashx的定義。
廢話不說,直接貼代碼:
一般處理程序的最簡單代碼為:
<%@ WebHandler Language="C#" Class="LoginHandler" %>

using System;
using System.Web;

public class LoginHandler : IHttpHandler,{
    
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        string strEmail = context.Request["Email"];//接收參數
        string strPwd = context.Request["Pwd"];
        //書寫業務邏輯
        context.Response.Write("Hello");
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}

上面這種寫法,一個功能可能就要對應一個ashx文件,項目里的文件可能比較多,不容易管理。如果我們想要在一個ashx文件中加入多個功能(即方法),我們就要引入反射的概念,相關ashx代碼如下:

<%@ WebHandler Language="C#" Class="AjaxHandler" %>

using System;
using System.Web;


public class AjaxHandler : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";
        string Cmd = context.Request["cmd"];//接收方法名參數
        if (!string.IsNullOrEmpty(Cmd))
        {
            System.Reflection.MethodInfo Method = this.GetType().GetMethod(Cmd, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);//通過反射機制,直接對應到相應的方法
            if (Method != null)
            {
                Method.Invoke(this, new object[] { context });
            }
        }
        else
        {
            context.Response.Redirect("~/Login.aspx");
        }
    }

    void DelContents(HttpContext context)
    {
        string strGuid = context.Request["Guid"];//接收參數
        context.Response.Write("OK");
    }
        
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

 ajax代碼,使用jqueryajax

$.ajax({
                    type: "POST",
                    url: "AjaxHandler.ashx",
                    async: false,
                    data: "cmd=DelContents&Guid=" + id,
                    success: function (data) {
                        ret = data;
                    }
                });

通過cmd傳遞方法名,來控制功能對應的方法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM