2012/06/07

20120607-程式-攔截網站下所有網址並處理它


(這是我所要解的問題)

目的:
連結到我的網站,然後後面是指定的Function及傳入的變數
ex:http://localhost/FunctionName?para1=XXX&para2=XXX
讓網站變成一個 Service 服務

=========================================
這一次 Web Call AP,而 AP Service 有兩個版本 [Java版 / .NET版]
而要讓Web它可以相互切換要呼叫 那一樣的程式版本,
所以大夥決定 以 HTTP GET 的方式處理,格式如上,回傳一個 JSON Format 資訊給前端Web。

想法上,
我不希望為每一個呼叫建立一頁  (以這種傳法,也無法建立)
就於 Global.asax 的 Application_BeginRequest 去處理每一個 網站的Request 

=========================================
程式最終寫法
=========================================
  protected void Application_BeginRequest(object sender, EventArgs e)
        {
            string[] segments = Request.Url.Segments;
            string querys = Request.Url.Query;
            Response.Write(string.Format("我取到的segments={0} \n querys={1}",segments.Length>0?segments[segments.Length-1]:"",querys));
            //Response.StatusCode = 200;
            //Response.StatusDescription = "OK";
            Response.End();
        }

1. 要寫 Response .End() 以結束此Request
因假設 網址為 http://localhost/aa?bb
它會再找尋 aa 這一頁面 ,但此頁面不存在,則出現 404 NOT Found 。
若用 Response.Redirect 把它轉至 固定"存在"的頁面時
它就陷入 "無窮迴圈" ~~~ Rediect完就到Global.asax,再Redirect ..........
所以用 Response.End()  叫它不要再做事情。

2. Web.Config 要設定:<超關鍵!>

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />  
  </system.webServer>


原本第1項處理完後,就該是如我預期,但出現怪異現象
於 Visual Studio 2010 的 F5 模式下 是OK的。
但在 IIS 下卻出現 404 NOT Found ! (Publish過去後)

針對這個問題,我Google了好久,
主要是 keyword 不知如何下 才可以找到相近的答案 @@

最後,試到這組Keyword
application_beginrequest Response.End() IIS7 404
http://goo.gl/ZY61e
http://goo.gl/lDN6X
真是 神來也 ~~



第一個資料,點進去後,
英文資訊還沒有看的很詳細,就先拿它的Web.config 設定試看看
結果OK!!!!

解決掉我的問題,超開心的!

後來細看它的描述後,完全和我的情境一樣, VS2010 OK,但IIS 不行

大意是說,IIS 下沒有直接觸發這個 Event (??)

Problem in IIS 7
In IIS 7, the .NET pipeline is fully integrated into IIS but by default, IIS does not serve static resources through your ASP.NET application. So your events will not fire for these types of resources.




記錄下自已 寫程式的歷程記錄,
讓自已也多一些記憶及知識的保存。


0 意見 :

張貼留言