C# WebService URL重寫


背景

  有時候我們會有這樣的需求,將 WebService URL 中的 asmx 后綴去掉;或者我們要模擬普通 Web 的 URL,接口名稱直接拼接在 URL 中。這些情況我們都要用到URL重寫。

 

關於Global

  首先,在 WebService 項目中添加一個 Global.asax 類。Global.asax 是一個文本文件,它提供全局可用代碼。這些代碼包括應用程序的事件處理程序以及會話事件、方法和靜態變量。有時該文件也被稱為應用程序文件。這里的重點不是它,而是它里邊的一個事件。

  在 Global.asax.cs 父類中我們會發現有這樣一個事件:BeginRequest。該事件在接收到一個應用程序請求時觸發。對於一個請求來說,它是第一個被觸發的事件,請求一般是用戶輸入的一個頁面請求(URL)。所以關於URL的重寫自然是寫在 Application_BeginReques 事件處理函數中。

 

URL重寫

  URL 重寫是截取傳入 Web 請求並自動將請求重定向到其他資源的過程。執行 URL 重寫時,通常會檢查被請求的 URL,並基於 URL 的值將請求重定向到其他 URL。比如我們要將http://localhost:25060/testService.asmx?op=Add重寫為http://localhost:25060/services/testService/add

  通過System.Web.HttpContext 類的 RewritePath() 方法,可以在 ASP.NET 級別實現 URL 重寫。HttpContext 類包含有關特定 HTTP 請求的 HTTP 特定信息。對於 ASP.NET 引擎收到的每個請求,均為該請求創建一個 HttpContext 實例。此類具有如下屬性:Request 和 Response,提供對傳入請求和傳出響應的訪問;Application 和 Session,提供對應用程序和會話變量的訪問;User,提供有關通過了身份驗證的用戶的信息;其他相關屬性。

  使用 RewritePath() 方法可以接受單個字符串作為要使用的新路徑。HttpContext 類的 RewritePath(string) 方法在內部對 Request 對象的 Path 屬性和 QueryString 屬性進行更新。除了 RewritePath(string),HttpContext中還包括另一種形式的 RewritePath() 方法,此方法可以接受三個字符串輸入參數。此備用重載形式不僅要設置 Request 對象的 Path 屬性和 QueryString 屬性,還要設置內部成員變量,這些變量用於計算 Request 對象的 PhysicalPath、PathInfo 和 FilePath 屬性值。

  贅述這么多也只是想讓大家知其所以然。關於代碼很簡單,只需在事件處理函數中添加如下代碼即可。

 1      protected void Application_BeginRequest(object sender, EventArgs e)
 2         {
 3             string path = Request.Url.LocalPath;
 4             if (!path.Contains(".asmx"))
 5             {
 6                 if (path.Contains(@"services/testService/add"))
 7                 {
 8                     Context.RewritePath(path.Replace("services/testService/add", "testService.asmx?op=Add"));
 9                 }
10             }
11         }

 


 
 

擴展閱讀

https://msdn.microsoft.com/zh-cn/library/ms972974.aspx

http://www.cnblogs.com/top5/archive/2009/12/28/1633837.html

http://www.cnblogs.com/I-am-Betty/archive/2010/09/06/1819558.html

 


免責聲明!

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



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