ASP.NET之自訂同步HTTP處理常式(圖文教程)

來源:互聯網
上載者:User

一、前言

說來這片簡單的教程還真是碰巧,是剛好我在寫另一個頁指令的時候看到的。就跟著進來看了看是什麼東西,發現比我們之前只會用.ashx,並且只能在申請這個檔案才可以進行響應。這些似乎讓它變不靈活,不能讓我們靈活的應用。而自訂HTTP處理常式可以完全消除上面的問題,它只是一個.cs的類檔案,並且你只要按照很簡單的準備工作就可以獲得很多的靈活度:

1.可以自訂使用者訪問何網頁時響應該檔案並把資料呈現發送給用戶端

2.可以對所有具有一致的尾碼名的請求檔案定義一個處理常式

3.具有同步與非同步選擇

我相信一定有人對於上面的說有一定不的理解,這裡我需要解釋它的一個重要意義,那麼大家就自然知道它的靈活所在了。

我們先舉例:

1.比如你訪問 http://www.****.com/web1.msll

你一定發現了問題所在.尾碼名是 .msll 你瀏覽網頁到如今一定沒有見過。而這個的確就是自訂HTTP處理常式的一個特點所在,尾碼名可以自己偽造。這個時候你一定會認為 web1 是那個 .cs 檔案的名稱,但是結果是 web1 根本不是那個 .cs 檔案的檔案名稱.他們是通過綁定來實現的。比如我實現了一個 he.cs 的類,然後我將其綁定到 hehehe.ppd 那麼當你訪問 http://www.*****.com/hehehe.ppd 那麼響應這個頁面的是 he.cs 的輸出結果

2.我們還是假設你訪問 http://www.****.com/list1.ssm

http://www.****.com/list2.ssm

http://www.****.com/list3.ssm

假如我告訴你這個三個看似不同的頁面其實都是一個 HTTP處理常式的輸出結果,這個其實很好理解,如果我寫了一個 bbsss.cs 的類,並且實現了有關功能。然後我將其綁定到 *.ssm 你可以發現這裡是 *.ssm 這個時候你就按照你正常的思考,就是只要是對尾碼名是 .ssm 頁面的申請都是使用同一個 bbsss.cs 類,這下是不是有趣了

二、註冊與綁定

為什麼要有這兩部呢?而且還是要註冊與綁定這兩個呢?

答案是 你唯寫一個類 vs是不可能知道你這個東西是幹什麼的,所以我們需要在 web.config 中註冊我們自訂的HTTP處理常式。而綁定則是讓iis知道我們這個網站中含有一個自訂的HTTP處理常式。(下面我將以 iis7 為例說明如何綁定)

1.註冊

複製代碼 代碼如下:<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="<!-- 這裡寫需要綁定的用戶端申請的頁面(*.smm,*.ffs,web1.ffe) -->" type="<!-- 這裡寫處理常式的類名 -->"
</httpHandlers>
</system.web>
</configuration>

以上需要自行編寫的部分我都已使用注釋寫好

2.綁定( iis7 )

1) 開啟 iis7 -》 開啟 網站 節點 -》 點擊你的網站的名稱

2) 雙擊

3) 點擊

4)

5) 最後點擊 確定 這樣在 iis 中的綁定就完成了(後面的完整例子我將會以文字介紹該過程)

三、關於類的實現注意點

雖然我們介紹完了註冊與綁定,但還不是所有,關於類的實現也有一定的要求。根據MSDN文檔的說明必須實現 ProcessRequest 方法與 IsReusable 屬性

關於 ProcessRequest 可以暫時理解為 Page_Load (即使他比Page_Load更底層)

其次就是沒有內建的 Request 與 Response ,可能有些人要崩潰了那怎麼寫啊,很簡單的問題沒有內建我們就自己去定義

IsReusable 的類型是 bool 類型,而且只要實現 get 不需要實現 set ,如果返回 true 表示使用線程池 如果為 false 表示不使用

關於這個類檔案的放置也有要求,要放在App_Code 檔案夾下(vs的網站中可以直接建立這個特殊的檔案夾)

四、完整的例子(自行建立類)

1.

以下為 HelloWorldHandler.cs 類的具體實現(放置在 App_Code 檔案夾下)

複製代碼 代碼如下:using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
///HelloWorldHandler 的摘要說明
/// </summary>
public class HelloWorldHandler : IHttpHandler
{
public HelloWorldHandler()
{
}

public void ProcessRequest(HttpContext context)
{
HttpRequest Request = context.Request;
HttpResponse Response = context.Response;
Response.Write("<html>");
Response.Write("<body>");
Response.Write("<h1>hello</h1>");
Response.Write("</body>");
Response.Write("</html>");
}

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

2.以下為 web.config 的內容複製代碼 代碼如下:<httpHandlers>
<add verb="*" path="*.sample" type="HelloWorldHandler" />
</httpHandlers>

3.IIS 配置(不要忘記把項目部署到 iis 中)

以下為具體配置

然後測試 http://localhost/SampleApplication/test.sample(連接埠為 80 時)

你就可以看到你的成果了

五、完結

到此你已經基本掌握了 自訂同步HTTP處理常式 ,當然這個只是一小部分,後面我們還會接觸到非同步,因為同步在使用者訪問量很大的情況下將會使伺服器資源迅速耗盡,而且也會讓降低使用者的實用性

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.