web-dev-qa-db-fra.com

HttpContext.Current.User.Identity.Name est vide à l'aide de IIS Express mais pas Visual Studio Development Server

HttpContext.Current.User.Identity.Name est vide/vide lorsque Visual Studio est défini sur "Utiliser local IIS serveur Web" mais fonctionne correctement lorsque Visual Studio est défini sur "Utiliser Visual Studio Development Server".

J'espère que vous pouvez dupliquer ce problème dans Visual Studio 2010 ou 2012 (j'ai essayé les deux) en procédant comme suit:

Créez une nouvelle "Application Web vide ASP.NET" avec ".NET Framework 4" sélectionné et nommez-le "WindowsAuthTest2". Remplacez le contenu de Web.config par

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Windows">
    </authentication>
  </system.web>
</configuration>

Ajoutez ensuite un nouveau "formulaire Web" au projet appelé "Default.aspx". Remplacez le code dans Default.aspx par

<%@ 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>

Et remplacez le code dans Default.aspx.cs par

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 + "]";
        }
    }
}

Je n'ai pas ReSharper pour me dire lesquelles de ces déclarations sont inutiles.

Ensuite, vous pouvez sélectionner le serveur Web que Visual Studio utilisera en cliquant avec le bouton droit sur le projet, en sélectionnant "Propriétés" (ou en double-cliquant sur "Propriétés" sous le projet), en sélectionnant "Web" et en accédant à la section "Serveurs".

Essayez-le avec "Utiliser Visual Studio Development Server" et "Utiliser local IIS serveur Web".

J'espère que vous pourrez m'aider à comprendre pourquoi HttpContext.Current.User.Identity.Name est vide lorsque "Utiliser local IIS serveur Web" est sélectionné.

22
user3063548

J'ai résolu ce problème en modifiant le IIS dans l'authentification

Windows Authenticaon = Enabled
Anonymous Authenticaon = DISABLED <=== Important
ASP.NET Impersonation Enabled

Mon IIS

10
Vinícius Todesco

Je l'ai résolu! vous devez autoriser "NETWORK", "NETWORK SERVICE" et IIUSRS dans le dossier. Et désactivez l'accès anonyme.

2
Manuel Gs