共享Global.asax和Error.aspx文件

Ada*_*ice 2 asp.net global-asax

我在解决方案中有几个ASP.NET网站以及一个通用的C#代码项目.如下:

  • WEBSITE1
  • WEBSITE2
  • ...
  • 网站(N)
  • 共同

首先,我想使用Global.asax文件记录所有未处理的异常.我可以为每个网站提供一个Global.aspx文件,但所有代码都是相同的,并且必须保持同一文件的多个副本是最新的.有没有办法将Global.aspx文件放在公共库中,然后从每个网站链接到它.我尝试过添加退出项目>添加为链接但它不会被页面运行.

其次所有的网站都需要一个错误页面,我可以写信息(不只是一个简单的html页面),所以我有一个Error.aspx页面,我想重定向到错误的详细信息.我可以再次为每个网站提供一个,但它将是同一页面.有没有办法将它存储在Common项目中并链接到它?到目前为止,我能想到的唯一解决方案是拥有一个Error网站,其中包含Error页面.

Kel*_*tex 7

您可以从基类继承Global.asax文件.所以你的global.asax看起来像这样:

<%@ Application Codebehind="Global.asax.cs" Inherits="MyApplication" Language="C#" %>
Run Code Online (Sandbox Code Playgroud)

然后你的Global.asax.cs看起来像这样:

public class MyApplication: BaseApplication 
{
    protected void Application_Start()
    {
        // application specific code... if any
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的库中定义:

public class BaseApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        // do your shared code here
        base.Application_Start();
    }
}
Run Code Online (Sandbox Code Playgroud)

就您的"全局"错误页面而言,我要做的是在每个网站上创建一个处理程序(.ashx)页面,然后创建一个库方法来显示您的错误信息.像这样的东西(Error.ashx)

<%@ WebHandler Language="C#" Class="errorhandler" %>

public class errorhandler: IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        MyLibrary.ErrorHandler(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:为清晰起见,示例中未包含命名空间.