Что бы ни случилось к свойству Cancel на ActionExecutingContext? Как можно было бы прервать RenderAction при использовании ActionFilterAttribute, или там другой путь состоит в том, чтобы освежевать эту кошку?
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
return;
}
base.OnActionExecuting(filterContext);
}
Код выше продолжает выполнять Действие, к этому относились несмотря на выход из деятельности OnActionExecuting?
---В дополнение к исходному сообщению: Спасибо за ответы ниже, однако, я не думаю, что сделал контекст достаточно ясным, я пытаюсь делать недействительным следующий вызов:
<% Html.RenderAction("Menu", "Shared", new { id = Model.OtherUserId }); %>
Когда пользователь не аутентифицируется, это действие ничего не должно возвращать, я мог легко поместить, 'если' бы блок на представлении, однако, я хотел бы сохранить правило в контроллере.
На основе версии от antonylesuisse, рабочая версия (на python > = 2.6).
# -*- coding: utf8 -*-
import xmlrpclib
import httplib
import socket
class TimeoutHTTP(httplib.HTTP):
def __init__(self, host='', port=None, strict=None,
timeout=socket._GLOBAL_DEFAULT_TIMEOUT):
if port == 0:
port = None
self._setup(self._connection_class(host, port, strict, timeout))
class TimeoutTransport(xmlrpclib.Transport):
def __init__(self, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *args, **kwargs):
xmlrpclib.Transport.__init__(self, *args, **kwargs)
self.timeout = timeout
def make_connection(self, host):
host, extra_headers, x509 = self.get_host_info(host)
conn = TimeoutHTTP(host, timeout=self.timeout)
return conn
class TimeoutServerProxy(xmlrpclib.ServerProxy):
def __init__(self, uri, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
*args, **kwargs):
kwargs['transport'] = TimeoutTransport(timeout=timeout,
use_datetime=kwargs.get('use_datetime', 0))
xmlrpclib.ServerProxy.__init__(self, uri, *args, **kwargs)
-121--2130661- Обобщил и расширил мои комментарии ниже вопроса здесь
Как и другие сказали, это не Фабрика , просто потому, что образец с таким названием не существует. Это либо абстрактная фабрика , либо Метод фабрики , хотя прагматично люди часто ссылаются на или просто говоря фабрика и это нормально для меня.
Сеанс, кэш и БД, как правило, инициализируются на ранних этапах процесса работы приложения, поэтому в основном это работа bootstrap. У меня складывается впечатление, что вы ищете не столько создание объектов, сколько их обработку по всему приложению. Это несколько отличается от того, что делает FactiveWhather .
Как я сказал в комментариях, только потому, что это не совсем FactiveWhather , не означает, что ваш код плохой. Если это решит вашу проблему, это круто. Но я все еще думаю, что то, что вы пытаетесь сделать, например, создание и управление ресурсами во время выполнения, лучше всего использовать с DI Сервис Контейнер .
Если вы не хотите использовать контейнер DI сейчас для этого, вы можете просмотреть Zend _ Приложение и то, как они загружают ресурсы . Это альтернатива и оставляет возможность добавить контейнеры DI позже.
На самом деле, в Zend Framework уже решены многие темы предыдущих вопросов, например, классы Config. Я не говорю использовать ZF, но вы можете проверить, как они делают вещи. Конечно, можно также посмотреть на другие рамки .
Некоторые сайты образца с примерами PHP:
Нет, нельзя отменить визуализацию из фильтра действий. Есть много причин, по которым не стоит этого делать. Что увидит клиент? Страница ошибки? Ничего?
Я думаю, что вы создаете фильтр действий авторизации, который приведет к чему-то другому, если вы не войдете. В рамке уже есть (Атрибут входа), который перенаправляет вас на страницу входа, если вы не вошли. Способ выполнения этих действий в рамке заключается в изменении выполняемого результата (filterContext.Result = [[новый результат]];). Если вам не нравится, как это работает, вы можете построить свою собственную реализацию.
Если вам все еще нужно отменить рендеринг или что-то подобное, вам потребуется создать собственный ActionResult и выполнить любую необходимую логику в методе Execute.
-- Обновление --
Если вы хотите использовать действие визуализации, вы должны просто поместить логику в контроллер и вернуть пустой результат, если вы не вошли в систему (в рамке есть результат действия под названием «EmpureResult»). Такая логика принадлежит действию контроллера.
Это сработало великолепные маты, в результате это:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new EmptyResult();
return;
}
base.OnActionExecuting(filterContext);
}