我在Global.asax中的OnApplicationStarted
方法期间进行系统版本比较,如果数据库版本和系统版本不匹配,则不允许系统启动。
所以它看起来像这样:
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之后可以点击方法的原因之一就是我们不会这样做。如果发生此异常,我想加载很多东西。
答案 0 :(得分:0)
此时您没有回复申请开始!这是应用程序启动时而不是在做出响应时。
如果通过设置将捕获所有请求的默认路由满足此条件,您可以在此处设置内容以将每个URL定向到错误页面。这将为您提供所需的功能,因为将来的请求会获得错误页面。
答案 1 :(得分:0)
你能抛出一个HTTP错误:
throw new HttpException(403, "Forbidden");
然后在你的web.config中:
<customErrors mode="On">
<error statusCode="403" redirect="~/VersionError.html"/>
</customErrors>
答案 2 :(得分:0)
由于您在应用程序启动时无法访问Response,但是如果满足条件,则希望所有传入请求都转到错误页面,您需要在管道中设置更远的内容。想想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发生在每个请求之前,确保始终检查版本...如果您发现事情变慢,可能需要缓存。