web-dev-qa-db-ja.com

HttpContext.Current.User.Identity.Nameは、IIS ExpressではなくVisual Studio Development Serverを使用して空です

HttpContext.Current.User.Identity.Nameは、Visual Studioが「ローカルIIS Webサーバーを使用]」に設定されている場合は空/空白ですが、Visual Studioが「Visual Studio開発サーバーを使用」に設定されている場合は正常に動作します。

次の操作を行うことで、Visual Studio 2010または2012(この両方を試しました)でこの問題を再現できることを願っています。

「.NET Framework 4」を選択して新しい「ASP.NET Empty Web Application」を作成し、「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を使用して、これらのステートメントのどれが不要であるかを教えてくれません。

次に、Visual Studioが使用するWebサーバーを選択するには、プロジェクトを右クリックし、[プロパティ]を選択(またはプロジェクトの下の[プロパティ]をダブルクリック)、[Web]を選択し、[サーバー]セクションに移動します。

「Visual Studio開発サーバーを使用」および「ローカルIIS Webサーバーを使用]」で試してください。

HttpContext.Current.User.Identity.Nameは、「Use Local IIS Web server」が選択されている場合は空です。

22
user3063548

認証のIISを変更することでこの問題を解決しました

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

My IIS

10

解決しました!フォルダ内の「NETWORK」、「NETWORK SERVICE」、およびIIUSRSに許可を与える必要があります。そして、匿名アクセスを無効にします。

2
Manuel Gs