使用IIS Express但不是Visual Studio Development Server,HttpContext.Current.User.Identity.Name为空

时间:2013-12-03 23:21:42

标签: c# asp.net visual-studio identity

当Visual Studio设置为“使用本地IIS Web服务器”时,

HttpContext.Current.User.Identity.Name为空/空白,但在Visual Studio设置为“使用Visual Studio开发服务器”时正常工作。

希望您可以通过执行以下操作在Visual Studio 2010或2012中复制此问题(我已尝试过两者):

创建一个新的“ASP.NET Empty Web Application”,选择“.NET Framework 4”并将其命名为“WindowsAuthTest2”。用

替换Web.config的内容
<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Windows">
    </authentication>
  </system.web>
</configuration>

接下来,在名为“Default.aspx”的项目中添加一个新的“Web窗体”。用

替换Default.aspx中的代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WindowsAuthTest2.Default" %>

<html>
    <head>
        <title></title>
    </head>
    <body>
        <asp:Label ID="Label1" runat="server"></asp:Label>
    </body>
</html>

并用

替换Default.aspx.cs中的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WindowsAuthTest2
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = "[" + HttpContext.Current.User.Identity.Name + "]";
        }
    }
}

我没有ReSharper告诉我哪些使用语句是不必要的。

然后,您可以通过右键单击项目,选择“属性”(或双击项目下的“属性”),选择“Web”,然后导航到“服务器”,选择Visual Studio将使用的Web服务器。部分。

尝试使用“使用Visual Studio开发服务器”和“使用本地IIS Web服务器”。

希望您可以在选择“使用本地IIS Web服务器”时帮助我找出HttpContext.Current.User.Identity.Name为空的原因。

2 个答案:

答案 0 :(得分:10)

我通过更改身份验证中的IIS

解决了这个问题
Windows Authenticaon = Enabled
Anonymous Authenticaon = DISABLED <=== Important
ASP.NET Impersonation Enabled

My IIS

答案 1 :(得分:2)

我已经解决了!您需要在文件夹中授予“NETWORK”,“NETWORK SERVICE”和IIUSRS的权限。并禁用匿名访问。