Это было отредактировано несколько раз, и мы решили вызвать основной класс, который упаковывает коллекцию RangePrinter
Это должно работать автоматически с любой коллекцией после того, как вы написали одноразовый оператор < < перегрузка, за исключением того, что вам понадобится специальная карта для печати пары, и вы можете настроить разделитель там.
Вы также можете использовать специальную функцию «печать» для элемента, вместо того, чтобы выводить его напрямую. Немного похоже на алгоритмы STL, позволяющие передавать пользовательские предикаты. С map вы бы использовали его таким образом, с пользовательским принтером для std :: pair.
Ваш «стандартный» принтер просто выведет его в поток.
Хорошо, давайте работать над пользовательским принтером. Я изменю свой внешний класс на RangePrinter. Итак, у нас есть 2 итератора и несколько разделителей, но мы не настроили, как печатать фактические элементы.
struct DefaultPrinter
{
template< typename T >
std::ostream & operator()( std::ostream& os, const T& t ) const
{
return os << t;
}
// overload for std::pair
template< typename K, typename V >
std::ostream & operator()( std::ostream & os, std::pair<K,V> const& p)
{
return os << p.first << '=' << p.second;
}
};
// some prototypes
template< typename FwdIter, typename Printer > class RangePrinter;
template< typename FwdIter, typename Printer >
std::ostream & operator<<( std::ostream &,
RangePrinter<FwdIter, Printer> const& );
template< typename FwdIter, typename Printer=DefaultPrinter >
class RangePrinter
{
FwdIter begin;
FwdIter end;
std::string delim;
std::string open;
std::string close;
Printer printer;
friend std::ostream& operator<< <>( std::ostream&,
RangePrinter<FwdIter,Printer> const& );
public:
RangePrinter( FwdIter b, FwdIter e, Printer p,
std::string const& d, std::string const & o, std::string const& c )
: begin( b ), end( e ), printer( p ), open( o ), close( c )
{
}
// with no "printer" variable
RangePrinter( FwdIter b, FwdIter e,
std::string const& d, std::string const & o, std::string const& c )
: begin( b ), end( e ), open( o ), close( c )
{
}
};
template<typename FwdIter, typename Printer>
std::ostream& operator<<( std::ostream& os,
RangePrinter<FwdIter, Printer> const& range )
{
const Printer & printer = range.printer;
os << range.open;
FwdIter begin = range.begin, end = range.end;
// print the first item
if (begin == end)
{
return os << range.close;
}
printer( os, *begin );
// print the rest with delim as a prefix
for( ++begin; begin != end; ++begin )
{
os << range.delim;
printer( os, *begin );
}
return os << range.close;
}
Теперь по умолчанию это будет работать для карт, пока оба типа ключа и значения могут быть распечатаны, и вы можете вставить свой собственный специальный принтер элементов, когда их нет (как вы можете с любым другим типом), или если вы не хотите = в качестве разделителя.
Я перемещаю свободную функцию, чтобы создать их до конца:
Свободная функция (версия итератора) выглядела бы примерно так, и вы могли бы даже иметь значения по умолчанию:
template<typename Collection>
RangePrinter<typename Collection::const_iterator> rangePrinter
( const Collection& coll, const char * delim=",",
const char * open="[", const char * close="]")
{
return RangePrinter< typename Collection::const_iterator >
( coll.begin(), coll.end(), delim, open, close );
}
Затем вы можете использовать его для std :: set by
std::cout << outputFormatter( mySet );
Вы также можете написать версию с бесплатной функцией, которая использует пользовательский принтер и версию с двумя итераторами. В любом случае они разрешат параметры шаблона для вас, и вы сможете передавать их как временные.
Конечно, дружище. Вам необходимо пройти аутентификацию на сайте. Это имя используется для аутентификации.
Вы аутентифицируетесь, не так ли?
Это не настройка и т. Д.
Щелкните ссылку ВХОД, если вы используете стандартный шаблон ASP.NET MVC (если моя память мне не изменяет).
Итак, что вам нужно, это проверка подлинности Windows. быстрый поиск в Google дал этот пост . Это довольно полезно (хотя и немного устарело, но все же актуально) ... проверьте это.
Нашел лучший пост с кодом MVC для проверки подлинности Windows. Вместо этого проверьте это.
Важная настройка конфигурации ...
...
<system.web>
...
<authentication mode="Windows"/>
...
</system.web>
...
Если вы не хотите Авторизовать для каждого контроллера или действия, вы можете выполнить полную авторизацию в файле web.config. Это должно работать, пока вы используете аутентификацию Windows. Если вы разрешите ASP.NET управлять проверкой подлинности, вам не нужно будет настраивать какие-либо параметры IIS. Тогда он должен хорошо работать с любым веб-сервером, на котором вы работаете. Я не знаю и не предполагаю, что вы пробовали до сих пор, я постараюсь дать полный ответ. Первое замечание о теге проверки подлинности форм в web.config. Все следующие настройки помещаются в раздел конфигурации system.web .
<!--
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" />
</authentication>
-->
Замените тегом аутентификации Windows.
<authentication mode="Windows" />
Затем добавьте тег авторизации, чтобы запретить доступ анонимным пользователям. Если пользователи используют Internet Explorer и подключаются из зоны интрасети, IE автоматически зарегистрирует пользователя. Но если пользователь подключается из зоны Интернета, IE по-прежнему будет отображать окно входа в систему, хотя для безопасности. Но это параметры, которые можно установить из IE.
<authorization>
<deny users="?" />
</authorization>
Установка только режима аутентификации без авторизации не приводит к принудительной аутентификации пользователя в ASP.NET. Если вы хотите контролировать безопасность из IIS, я не могу сильно помочь с настройками IIS, но я знаю, что в основном вы можете отключить базовую проверку подлинности, затем включить встроенную проверку подлинности Windows, а затем отключить учетную запись анонимного входа, что приведет к таким же или лучшим результатам.
Я также работаю над проектом MVC в данный момент, я протестировал вышеуказанные настройки в своем проекте, и он работает. Атрибут Authorize вам не понадобится, поскольку в конфигурации есть тег авторизации . Надеюсь, это поможет вам и не даст вам еще -1.
Прикрепили ли вы атрибут Authorize к действию или контроллеру ur?
public class HomeController : Controller {
[Authorize]
public ActionResult Index() {
string userName = User.Identity.Name;
return View();
}
}