2010-12-29 1 views
0


Я немного в затруднительном положении. Я использую JavaScript-функции PageMethod, где я вызываю PageMethod, который работает как драгоценный камень. Однако я имею вопрос в доступе состояния HttpContext, который возвращает мне значение «SYSTEM» дляJavaScript PageMethods call loss HttpContext.Current State

HttpContext.Current.User.Identity.Name

, который не является фактическим током Имени пользователя.

Я знаю, что есть несколько вариантов, таких как сохранение HttpContext.Current в сеансе или сохранение состояния Контекста в каком-либо другом настраиваемом контейнере, но с учетом среды веб-фермы. Я предполагаю, что это не будет работать должным образом.

Вот код, я работаю с

function MyFunction(){ 
    PageMethod.MyPageMethod(); 
} 

здесь является сигнатура метода сервера

[System.Web.Services.WebMethod()] 
    public static void MyPageMethod() 
    { 
     // gives me "SYSTEM" 
     var user = HttpContext.Current.User.Identity.Name; 
    } 

Кроме того, если я использую приведенный выше код для доступа к имени пользователя в OnLoad случае на странице, тогда он отлично работает и возвращает мне CurrentUserName.

Я пытаюсь получить код выше, чтобы работать в Webform ASP.NET ... :)

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

Любая помощь будет глубоко оценена.

NiK ...

+0

Просто интересно, что режим проверки подлинности вы используете? Также любые другие настройки в web.config для авторизации/олицетворения? – gbs

+0

Спасибо, что нашли время, чтобы прочитать мой вопрос ... мы используем проверку подлинности на основе Windows через Active Directory. – NiK

+0

Я только что проверил быстрый тест на моем локальном iis с режимом аутентификации = «Windows» в моем веб-контенте и запретил пользователю = ?» и получил mydomain/имя пользователя. Интересно, что-то другое, чем моя конфигурация. – gbs

ответ

0

После некоторого чтения я думаю, что я пытался сделать то, что не является правильным, какой метода работы страницы. Это довольно сложно, когда система проверки подлинности вашего приложения основана на Windows, и эти методы страниц при вызове из JavaScript не будут вызывать обратную передачу и не вызывать HttpModules. Вместо этого он просто вызывает этот метод страницы.

FYI, у нас был свой собственный HTTPModule для обработки безопасности. Это происходит даже до появления любого другого HttpModule, и это не вызывалось при вызове метода страницы, поскольку мы не выполняем обратную передачу или даже частичную обратную передачу (так что целая «ниша» HTTPPost отсутствовала). Более того, это привело к выводу, что мы совершаем служебные звонки без какой-либо аутентификации и потенциально представляем для нас большую проблему с безопасностью.

Суть в том, что это был плохой дизайн, хорошо сказав, что я хотел бы упомянуть о решении/обходном пути, с которым мы столкнулись, и вот что мы сделали. Таким образом, единственный вариант, который мы имели, - это сделать обратную передачу, поддерживая пользовательский интерфейс, и мы хотели асинхронно обновлять сообщение метки, и мы достигли этого, выполнив взломать Sys.Application.add_init.

<script language="javascript" type="text/javascript" > 
    Sys.Application.add_init(function() { 
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endRequest); 
    }); 

     function beginProcess() {   
     processCurrentItem(); 
    } 

     var currentItem = 0; 
     function processCurrentItem() { 
     if (currentItem < 5) { 
      currentItem = currentItem + 1; 
      __doPostBack('updatePanel', currentItem);     
     } 
    } 
    function endRequest() { 
     processCurrentItem(); 
    } 
    </script> 

Разметка мы имели в месте было довольно просто с меткой на панели обновления и кнопка, которая вызывает «) beginProcess (» функцию. Наконец, в OnLoad у нас был следующий код:

protected override void OnLoad(EventArgs e) 
    { 
     if (this.IsPostBack) 
     {    
      this.lblLabel.Text = "text you may wanna update with"; 
      // Call the Method you may wanna call 
      // also you may use Request["__EVENTARGUMENT"] to know who caused the 
      // postback and Request["__EVENTTARGET"] to access the argument you may 
      // have passed in. 
     }    
    } 

И это решение больше не использует методы страницы JavaScript. И основываясь на этом решении, если кто-то думает, что я что-то упустил, или думаю, что есть другой способ сделать это, тогда обновите этот пост своими предложениями.

  • NiK
Смежные вопросы