Оператор содержит ключевое слово.
Выражение не содержит ключевое слово.
print "hello"
является оператором, поскольку print
является ключевым словом.
"hello"
является выражением, но сжатие списка против этого.
Ниже приведен оператор выражения, и это истинно без понимания списка:
(x*2 for x in range(10))
Хорошо, я работал вокруг этого. Я сделал пользовательский ActionResult (HttpForbiddenResult) и пользовательский ActionFilter (NoFallBackAuthorize).
Для предотвращения перенаправления HttpForbiddenResult отмечает ответы с кодом состояния 403. FormsAuthentication не ловит ответы с этим кодом, таким образом, перенаправление входа в систему эффективно пропускается. NoFallBackAuthorize фильтруют проверки, чтобы видеть, авторизовывается ли пользователь во многом как, включенный, Авторизуйте фильтр. Это отличается, в котором это возвращает HttpForbiddenResult, когда доступ запрещен.
HttpForbiddenResult довольно тривиален:
public class HttpForbiddenResult : ActionResult { public override void ExecuteResult(ControllerContext context) { if (context == null) { throw new ArgumentNullException("context"); } context.HttpContext.Response.StatusCode = 0x193; // 403 } }
Это, кажется, не возможно пропустить перенаправление страницы входа в систему в FormsAuthenticationModule.
Мог бы быть клудж (и даже может не работать), но на Вашей Странице входа в систему посмотрите если Request.QueryString["ReturnUrl"] != null
и раз так набор Response.StatusCode = 401
.
Примите во внимание, что необходимо будет все еще заставить консольное приложение проходить проверку подлинности так или иначе. Вы не получаете HTTP основной автор бесплатно: Вы имеете к самокрутке, но существует много реализаций о.
Вы писали свой собственный атрибут FormsAuth для действия? Если так, в методе OnActionExecuting Вы передаетесь FilterExecutingContext. Можно использовать это для пасования назад этого 401 кода.
public class FormsAuth : ActionFilterAttribute
{
public override void OnActionExecuting(FilterExecutingContext filterContext)
{
filterContext.HttpContext.Response.StatusCode = 401;
filterContext.Cancel = true;
}
}
Это должно работать. Я не уверен, записали ли Вы атрибут FormsAuth или если Вы получили его от где-то в другом месте.
Я не использовал AuthorizeAttribute, который приезжает в Предварительный просмотр 4 все же. Я прокрутил свое собственное, потому что я использовал платформу MVC начиная с первого CTP. Я бросил беглый взгляд на атрибут в отражателе, и он делает то, что я упомянул выше внутренне, кроме они используют шестнадцатеричный эквивалент 401. Я должен буду посмотреть далее вызов, для наблюдения, где исключение поймано, потому что более, чем вероятный это - то, где они делают перенаправление. Это - функциональность, которую необходимо будет переопределить. Я не уверен, можно ли сделать это уже, но я отправлю назад, когда я найду его и даю Вам работу вокруг, если Haacked не видит это и отправляет его самостоятельно.
Я сделал некоторый поиск с помощью Google, и это - то, что я придумал:
HttpContext.Current.Response.StatusCode = 401;
Не уверенный, если это работает или нет, я не протестировал его. Так или иначе это стоит попытки, правильно?:)