今天一塊兒來看一個簡單的例子,主要是用來實現一個映射功能,
咱們通常訪問一個網址的時候好比是這樣的
http://localhost:6166/WebSite1/api/request.aspx?strtext=123web
那麼你們必定都會說,在網站WebSite1的api目錄下必定有request.aspx這樣一個文件。
那麼我今天要告訴你的就是沒有這個文件。以下圖api
你沒有看錯,沒有報任何的錯誤,
那這是怎麼回事呢。
咱們如今能夠來看看這個目錄下有一個Webconfig文件,我們打開看一下安全
<?xml version="1.0"?> <configuration> <!--IIS經典模式下使用--> <system.web> <httpHandlers> <add path="request.aspx" verb="*" type=" Bll.Handler.Test"/> <add path="test.aspx" verb="*" type=" Bll.Handler.Test"/> </httpHandlers> </system.web> <!--IIS集成模式下使用--> <!--<system.webServer> <handlers> <add name="request" path="request.aspx" verb="*" type=" Bll.Handler.Test"/> <add name="test" path="test.aspx" verb="*" type=" Bll.Handler.Test"/> </handlers> </system.webServer>--> </configuration>
這是什麼意思呢。
這裏面有兩種配置,主要是適用於IIS的集成模式和經典模式,只是配置不一樣,暫時沒有其餘的不一樣點
你們知道就好了,
下面以經典模式來分析下吧網站
<add path="request.aspx" verb="*" type=" Bll.Handler.Test"/>
path這個呢就是咱們訪問的網頁地址,就是上面輸入的,咱們找不到的那個文件名
而後對應的處理程序是type=" Bll.Handler.Test"
verb="*" 是指定接收的方式,*是Get,Post均可以,也能夠直接寫Post這樣就只接收Post提交了。
如今你們明白了吧
你訪問request.aspx其實訪問的就是Bll.Handler.Test.cs
看代碼spa
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Web; using Bll; namespace Bll.Handler { class Test : IHttpHandler { public void ProcessRequest(HttpContext context) { //接收這個參數 string strtext = context.Request["strtext"].Trim(); //輸出這個參數 context.Response.Write(strtext); } public bool IsReusable { get { return false; } } } }
個人Webconfig有兩個配置意思就是說咱們能夠給這個Test.cs文件定義多個文件名來訪問,這樣前臺怎麼也找不到你實際訪問的是那個頁面,並且還能夠達到封裝的效果。讓非開發着不能輕易的看到你的頁面代碼。
由於這個是能夠放在一個類庫裏面的。
以下3d
也算是加了一層安全機制吧,
而且方便了你們控制
咱們無論訪問的是http://localhost:6166/WebSite1/api/request.aspx?strtext=123
仍是http://localhost:6166/WebSite1/api/test.aspx?strtext=123
都是在訪問一個通常處理程序Test.cs
並且這個訪問的名字你們能夠隨便配置,我我的感受仍是很方便的。
有興趣的朋友能夠試試code