本周我们的服务器上有一个非常奇怪的问题,其中一个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页面上使用private
或protected
方法(我总是认为独立页面中的代码是自包含的,所以草率访问修饰符不应该是差)。
(注意:我没有多写c#,所以我对语言的掌握几乎只是理论上的。我只是在它成为一个真正的问题之前尝试解决这个问题。)
答案 0 :(得分:1)
我的第一个问题是,如果aspx中的公共方法可以被网站上其他地方的脚本访问吗?
为了调用公共实例方法,需要此类的实例。我怀疑您的问题与直接调用此方法的其他脚本无关。更有可能的是,HTTP请求被发送到相应的ASPX页面,该页面又调用该方法。此请求可以由客户端(页面上的某个链接,...)或直接由服务器(使用HttpWebRequest)完成。要进一步调试此问题,请尝试查看Web服务器日志文件以查看对此页面发出的所有请求。
我的第二个问题是,我们是否应该在aspx页面上使用私有或受保护的方法(我总是认为独立页面中的代码是自包含的,所以草率访问修饰符不应该有所作为。)
如果这些方法不打算被代码的其他部分使用,那么最好将它们设为私有或受保护,这不仅与ASP.NET有关。
答案 1 :(得分:1)
最好将PageMethod等方法设为私有或受保护。我相信Page_Load和其他页面生命周期方法必须是公开的,但其他方法则不然。 asp.net生成的类可以像其他类一样访问,尽管有时它们很难找到。我经常看到这样的奇怪之处就是有人复制了一个aspx页面而忽略了更改页面指令,所以你在前面有多个代码指向一个代码隐藏。