2012-07-21 47 views
2

我在C#ASP.NET Web應用程序中有幾個WebMethods。我想改變他們的行爲來驗證每個請求。想象一下下面的代碼:ASP.NET重寫webmethod

[WebMethod] 
public static void DoSomething() 
{ 
    if (ValidateRequest()) 
    { 
     HttpContext.Current.Response.StatusCode = 400; 
     // do some other stuff 
     return; 
    } 
    // rest of method 
} 

我注意到當然了ValidateRequest()方法調用是常見到我的WebMethods的很大一部分。無論如何,我可以將它連接起來,以便所有WebMethods自動具有相同的行爲?我可以添加第二個屬性來完成這個方法嗎?

+0

全局???????? – 2012-07-21 17:45:45

+1

如何在靜態頁面方法中訪問HttpContext? – 2012-07-21 17:53:07

+0

ValidateRequest做什麼?值得將它的代碼添加到你的文章中。 – Mendhak 2012-07-21 17:54:47

回答

0

在Global.asax文件的開始請求中添加驗證請求。

現在,您需要某種代碼來檢查請求是否應該被驗證。

我不確定如何在網絡表單,這樣做...但是,我會做的是:

使用RequestPath屬性(獲取方法和類的名稱,如果他們匹配您的服務URL)

HttpContext.Current.Request.Path; 

然後,我會創建一個方法屬性,並可能使用反射來查看請求是否應該驗證。 (見下面的鏈接)

http://msdn.microsoft.com/en-us/library/z919e8tw.aspx

這樣,從這個角度上,你只需要標記你的「[驗證]」屬性的方法,這一切應該只是工作。

public class Global : HttpApplication 
    { 
     protected void Application_BeginRequest(object sender, EventArgs e) 
     { 
      if(ShouldValidate() && !IsValidRequest()){ 
       //add your custom error status here perhaps 
       Response.StatusCode = 400 
       Response.StatusDescription = "Something Bad happened" 
       HttpContext.Current.Response.End() 
      } 
     } 
+0

這是一個有趣的解決方案。雖然我儘量保持我的BeginRequest如修剪地(因爲它運行在每個請求),我喜歡,我可以標記與屬性的方法,雖然反射似乎總是複雜且容易出錯。我希望有另一種方式。 – Toby 2012-07-22 00:59:30