2012-07-21 27 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