【发布时间】:2014-09-22 11:20:48
【问题描述】:
我们正在开发一个 ASP.NET MVC Web 应用程序,该应用程序的某些数据依赖于另一个系统。 (这个选择的优点不在这个问题的范围内)
当我们的 Web 应用程序启动时,我们需要它来检查其他系统的状态。为此,我们使用 HTTPCLient 请求登录它。
如果系统没有响应或凭据不正确,那么我们的系统也不应该启动,并将用户重定向到错误页面。如果登录成功,我们会从中获取一些数据,并将其放入本地缓存中。
我遇到的问题是用户没有被定向到错误页面,而是被定向到我们的应用程序登录页面。
这是我的全球 ASAX。
private bool _externalSystemAvailable;
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
AutomapperConfiguration.Configure();
_externalSystemAvailable = ExternalSystem.Login();
}
protected void Application_BeginRequest(object source, EventArgs e)
{
var app = (HttpApplication) source;
var ctx = app.Context;
FirstRequestInitialisation.Initialise(ctx, _externalSystemAvailable);
}
我有另一个基于this 的类,它检查应用程序是否已经初始化并执行必要的初始化后例程。我有这个类,因此不会对每个请求都执行检查。
public class FirstRequestInitialisation
{
private static bool _alreadyInitialized = false;
private static object _lock = new object();
public static void Initialise(HttpContext context, bool _xternalSystemAvailable)
{
if (_alreadyInitialized)
{
return;
}
lock (_lock)
{
if (_alreadyInitialized)
{
return;
}
}
if ( !externalSystemAvailable)
{
HttpContext.Current.RewritePath("/Home/Error");
}
_alreadyInitialized = true;
}
}
HttpContext.Current.RewritePath("/Home/Error");被点击,但用户没有被重定向。
【问题讨论】:
标签: c# .net asp.net-mvc asp.net-mvc-4 global-asax