2013-10-30 61 views
4

我有一個在4.0框架上運行的ASP.NET Web窗體應用程序項目。我對Web應用程序非常熟悉,但與Web窗體應用程序沒有多大關係。今天我遇到了他們兩人之間的顯着差異,我對這種差異甚至存在的原因感到困惑。LogonUserIdentity.Name與User.Identity.Name

通常,在Web應用程序中,如果我想確定誰是當前用戶的頁面,那麼我只需從User.Identity.Name中檢索他們的域登錄。所以,當我在我的調試環境中運行我的解決方案(我的Web Forms Application!),並且發現User.Identity.Name爲空時,我感到非常困惑。所以我用google搜索了一下「User.Identity.Name是空的」,並且遇到了大量所有處理有問題的人的鏈接,當他們沒有禁用IIS中的匿名身份驗證時。當然,這不是我的問題(我認爲),因爲我只是在這裏從Visual Studio 2012進行調試。

但是,我繼續挖掘並最終在HttpContext上發現了一些不爲空的屬性,並返回用戶的域登錄。該物業是HttpContext.Current.Request.LogonUserIdentity.Name。這使我對我的問題...

問題:在我的Web窗體應用程序,爲什麼User.Identity.Name空,但HttpContext.Current.Request.LogonUserIdentity.Name是不是?

在此先感謝您的幫助!

編輯:忘了說我在我的web.config中有什麼(因爲我確定它會被要求如果我不這樣做!)。

<system.web> 
    <customErrors mode="Off" /> 
    <compilation debug="true" targetFramework="4.0" /> 
    <authentication mode="Windows"/> 
</system.web> 
<system.webServer> 
    <httpProtocol> 
     <customHeaders> 
     <clear /> 
     <add name="X-UA-Compatible" value="IE=10,chrome=1; IE=9,chrome=1; IE=8,chrome=1; IE=edge,chrome=1" /> 
     </customHeaders> 
    </httpProtocol> 
    <modules runAllManagedModulesForAllRequests="true" /> 
    <defaultDocument> 
     <files> 
     <add value="Home.aspx" /> 
     </files> 
    </defaultDocument> 
    </system.webServer> 

這幾乎所有我在我的web.config除了EntityFramework的標籤。

回答

4

我自己找到答案。 IIS Express的applicationhost.config被設置爲不允許Windows身份驗證。我只是設置enabled =「true」,然後User.Identity不再是空的。

<windowsAuthentication enabled="true"> 
    <providers> 
    <add value="Negotiate" /> 
    <add value="NTLM" /> 
    </providers> 
</windowsAuthentication> 

編輯:
1)我的道歉缺乏信息。實際上,我的原始答案中修改了XML標籤,但我顯然忘記了通過單擊「代碼示例」按鈕將它們標記爲代碼,因此XML標籤從不顯示!他們現在應該可見。

2)我修改的applicationhost.config位置位於My Documents下的幾個文件夾中。確切位置是:C:\ Users [您的用戶] \ My Documents \ IISExpress \ config

+1

+1,但不要讓我掛!我在哪裏可以找到這個'applicationhost.config'文件?這是用於我的本地機器還是Visual Studio Program Files文件夾中的某個地方? – jp2code

+0

你在哪裏設置了enabled =「true」?在哪個關鍵? – Taosique

+0

@Taosique,你是否贊成這個?我發現它對我非常有用 - 主要是這個問題,但是當我問到它時,他回來了,並提供了對我有用的其他細節。 – jp2code