1

我正在OnApplicationStartedGlobal.asax 中的方法期间进行系统版本比较,如果数据库版本和系统版本不匹配,则不允许系统启动。

所以它看起来像这样:

protected override void OnApplicationStarted()
{
  try{
     if(systemVersion != dbVersion)
        throw new Exception("They are not same!");
  }
  catch{
    //do some other things
    //Response.Redirect("~/VersionError.html");
  }
}

但它说“在这种情况下没有响应。” 我试图抓住错误,Application_Error但我得到了同样的错误。

我的问题是如何从这些方法中将用户重定向到错误页面?

编辑:

我知道此时没有回应,但我在问如何解决这个问题。而且我可以在 OnApplicationStarted 之后点击方法的原因之一是,如果发生此异常,我们不想加载很多东西。

4

3 回答 3

0

此时您正在应用程序启动中没有任何响应!这是在应用程序启动时而不是在做出响应时。

如果通过设置将捕获所有请求的默认路由满足此条件,您可以在此处设置一些内容以将每个 url 定向到错误页面。这会给你你想要的功能,因为未来的请求会得到一个错误页面。

于 2013-03-01T16:46:30.260 回答
0

你能抛出一个 HTTP 错误吗:

throw new HttpException(403, "Forbidden");

然后在你的 web.config 中:

  <customErrors mode="On">
    <error statusCode="403" redirect="~/VersionError.html"/>
  </customErrors>
于 2013-03-01T16:52:02.147 回答
0

由于您在应用程序启动时无权访问响应,但希望在满足条件时所有传入请求都转到错误页面,因此您需要在管道的更远处设置一些东西。想想 IIS 模块。通过以下方式安装模块:

<system.webServer>
  <modules>
    <add name="VersionsNotSameHandler" 
         type="Company.Exceptions.VersionsNotSameHandler, Company.Exceptions" 
         preCondition="managedHandler" />
  </modules>
</system.webServer>

现在对于模块代码:

namespace Company.Exceptions
{
  public class VersionsNotSameHandler: IHttpModule
  {
    public void Dispose() { }

    public void Init(HttpApplication application)
    {
        context.PreRequestHandlerExecute += newEventHandler(OnPreRequestHandlerExecute) 
    }

    public void OnPreRequestHandlerExecute(Object source, EventArgs e){

        HttpApplication app = (HttpApplication)source; 
        HttpRequest request = app.Context.Request;
    // Check for invalid versioning
        app.Response.Redirect('.html page displaying error', true);
    }
  }
}

OnPreRequest 发生在每个请求之前,确保始终检查版本......如果您发现速度变慢,您可能需要缓存。

于 2013-03-01T17:17:04.120 回答