Мы разрабатываем веб-приложение ASP.NET MVC, которое зависит от другой системы для некоторых ее данных. (Достоинства этого выбора не входят в сферу применения этого вопроса)Проверка состояния внешней системы при запуске приложения
Когда наше веб-приложение запускается, нам необходимо его проверить статус другой системы. Мы делаем это, войдя в него с помощью запроса 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");
идет удар, но пользователь не перенаправляется.
Да, я был вниз по бесконечному пути петли уже :) – MrBliz
вопрос фиксируется сейчас в любом случае – MrBliz