Пользователь. Идентификационные данные. Пробел имени в ASP.NET MVC

Это было отредактировано несколько раз, и мы решили вызвать основной класс, который упаковывает коллекцию 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 );

Вы также можете написать версию с бесплатной функцией, которая использует пользовательский принтер и версию с двумя итераторами. В любом случае они разрешат параметры шаблона для вас, и вы сможете передавать их как временные.

22
задан Aaron 1 July 2009 в 06:38
поделиться

3 ответа

Конечно, дружище. Вам необходимо пройти аутентификацию на сайте. Это имя используется для аутентификации.

Вы аутентифицируетесь, не так ли?

Это не настройка и т. Д.

Щелкните ссылку ВХОД, если вы используете стандартный шаблон ASP.NET MVC (если моя память мне не изменяет).

ОБНОВЛЕНИЕ (поскольку опубликовано добавлено больше информации / комментариев)

Итак, что вам нужно, это проверка подлинности Windows. быстрый поиск в Google дал этот пост . Это довольно полезно (хотя и немного устарело, но все же актуально) ... проверьте это.

Нашел лучший пост с кодом MVC для проверки подлинности Windows. Вместо этого проверьте это.

Важная настройка конфигурации ...

...
 <system.web>
  ...
  <authentication mode="Windows"/>
  ...
 </system.web>
 ...
13
ответ дан 29 November 2019 в 04:47
поделиться

Если вы не хотите Авторизовать для каждого контроллера или действия, вы можете выполнить полную авторизацию в файле 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. ​​

8
ответ дан 29 November 2019 в 04:47
поделиться

Прикрепили ли вы атрибут Authorize к действию или контроллеру ur?

public class HomeController : Controller {
    [Authorize]
    public ActionResult Index() {
         string userName = User.Identity.Name;
         return View();
    }
}
7
ответ дан 29 November 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: