ASPX页面中的公共方法在其他脚本中使用

时间:2011-02-26 08:59:54

标签: c# accessor

本周我们的服务器上有一个非常奇怪的问题,其中一个aspx脚本中的方法(没有代码隐藏文件)以某种方式从我们网站上其他地方完全不相关的页面调用。基本上,剧本说这个:

   <script language="c#" runat="server">
   public void Page_Load(object sender, EventArgs e)
   {
        // some initializer logic
        PageMethod("data");
   }
   public string PageMethod (string strInput) 
   { 
        // More logic
   }
   </script>

我们运营着一个由四台服务器组成的服务器场,我们看到PageMethod被所有服务器上的几个地方的脚本调用,所以虽然我的第一直觉是这是服务器上的一个损坏的缓存(我仍然怀疑它可能是),我的直觉告诉我,我们允许我们的代码发生这种情况。我们一直在使用这种代码样式用于yonks,但最近将我们的服务器升级到.NET 2.0。

我的第一个问题是,如果aspx中的public方法可以被网站上其他地方的脚本访问吗?我的第二个问题是,我们是否应该在aspx页面上使用privateprotected方法(我总是认为独立页面中的代码是自包含的,所以草率访问修饰符不应该是差)。

(注意:我没有多写c#,所以我对语言的掌握几乎只是理论上的。我只是在它成为一个真正的问题之前尝试解决这个问题。)

2 个答案:

答案 0 :(得分:1)

  

我的第一个问题是,如果aspx中的公共方法可以被网站上其他地方的脚本访问吗?

为了调用公共实例方法,需要此类的实例。我怀疑您的问题与直接调用此方法的其他脚本无关。更有可能的是,HTTP请求被发送到相应的ASPX页面,该页面又调用该方法。此请求可以由客户端(页面上的某个链接,...)或直接由服务器(使用HttpWebRequest)完成。要进一步调试此问题,请尝试查看Web服务器日志文件以查看对此页面发出的所有请求。

  

我的第二个问题是,我们是否应该在aspx页面上使用私有或受保护的方法(我总是认为独立页面中的代码是自包含的,所以草率访问修饰符不应该有所作为。)

如果这些方法不打算被代码的其他部分使用,那么最好将它们设为私有或受保护,这不仅与ASP.NET有关。

答案 1 :(得分:1)

最好将PageMethod等方法设为私有或受保护。我相信Page_Load和其他页面生命周期方法必须是公开的,但其他方法则不然。 asp.net生成的类可以像其他类一样访问,尽管有时它们很难找到。我经常看到这样的奇怪之处就是有人复制了一个aspx页面而忽略了更改页面指令,所以你在前面有多个代码指向一个代码隐藏。