Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc ASP.Net MVC中的User.Identity.Name为空_Asp.net Mvc_Iis - Fatal编程技术网

Asp.net mvc ASP.Net MVC中的User.Identity.Name为空

Asp.net mvc ASP.Net MVC中的User.Identity.Name为空,asp.net-mvc,iis,Asp.net Mvc,Iis,完全按照标题 简单地说,在我的HomeController中,我有: string Username = User.Identity.Name; 为什么这个值总是空的 我是否需要在web.config中放置一些特殊的内容来实现此值。我已经在VS dev web服务器和windows server 2003 IIS服务器上进行了尝试 它必须是一些简单的东西,IIS中的服务器设置或其他东西,因为代码非常简单,似乎是引用此值的正确方式 很多人肯定是配偶。您需要通过网站验证。这是用于身份验证的名称 你

完全按照标题

简单地说,在我的HomeController中,我有:

string Username = User.Identity.Name;
为什么这个值总是空的

我是否需要在web.config中放置一些特殊的内容来实现此值。我已经在VS dev web服务器和windows server 2003 IIS服务器上进行了尝试

它必须是一些简单的东西,IIS中的服务器设置或其他东西,因为代码非常简单,似乎是引用此值的正确方式


很多人肯定是配偶。您需要通过网站验证。这是用于身份验证的名称

你在验证,对吗

这不是一个背景,等等

如果您使用的是股票标准ASP.NET MVC模板(如果我的内存正常),请单击登录链接

更新(因为帖子添加了更多信息/评论) 因此,您需要的是Windows身份验证。我想出了一个好主意。它非常有用(虽然有点旧,但仍然相关)。。看看这个

找到用于Windows身份验证的MVC代码。看看这个

重要的配置设置是

...
 <system.web>
  ...
  <authentication mode="Windows"/>
  ...
 </system.web>
 ...
。。。
...
...
...

您是否已将授权属性附加到您的操作或控制器

public class HomeController : Controller {
    [Authorize]
    public ActionResult Index() {
         string userName = User.Identity.Name;
         return View();
    }
}

如果您不希望对每个控制器或操作进行授权,则可以在web.config文件中进行全面授权。只要您使用的是Windows身份验证,这项功能就应该有效。如果允许ASP.NET控制身份验证,则无需配置任何IIS设置。然后,它应该可以很好地与您正在运行的任何web服务器配合使用。我不知道或假设你到目前为止尝试了什么,我将尝试在我的答案中完整。首先在web.config中去掉表单身份验证标记。以下所有设置都放置在system.web配置部分

<!--
    <authentication mode="Forms">
      <forms loginUrl="~/Account/LogOn" timeout="2880" />
    </authentication>
-->

替换为Windows身份验证标记

<authentication mode="Windows" />

然后添加授权标记以拒绝匿名用户的访问。如果用户使用Internet Explorer并从Intranet区域连接,IE将自动登录用户。但是,如果用户是从Internet区域连接的,IE仍然会显示一个登录框,以确保安全。但这些都是可以从IE设置的选项

<authorization>
    <deny users="?" />
</authorization>

未经授权单独设置身份验证模式不会强制用户在ASP.NET中进行身份验证。如果您想控制IIS的安全性,我无法帮助您进行IIS设置,但我知道基本上您可以禁用基本身份验证,然后启用集成Windows身份验证,然后禁用匿名登录帐户,这将获得相同或更好的结果


我现在也在做一个MVC项目,我用我的项目测试了上面的设置,效果很好。您不需要Authorize属性,因为配置中有authorization标记。我希望这能对您有所帮助,而不是得到另一个-1。

如果您想使用windows身份验证,仅添加一个是不够的

...
 <system.web>
  ...
  <authentication mode="Windows"/>
  ...
 </system.web>
 ...
。。。
...
...
...
您还需要检查MVC项目的自述文件说明,尤其是在运行IIS Express和使用Visual Studio 2012时

见下文:

在IIS Express上托管:

  • 在解决方案资源管理器中单击您的项目以选择该项目

  • 如果属性窗格未打开,请将其打开(F4)

  • 在项目的属性窗格中:
    a)将“匿名身份验证”设置为“禁用”。
    b) 将“Windows身份验证”设置为 “已启用”。

  • 在IIS 7或更高版本上托管:

  • 打开IIS管理器并导航到您的网站

  • 在“功能”视图中,双击“身份验证”

  • 在“身份验证”页面上,选择Windows身份验证。如果Windows身份验证不是一个选项,您需要确保 服务器上已安装Windows身份验证

    要在Windows上启用Windows身份验证,请执行以下操作:

  • a) 在控制面板中打开“程序和功能”。 b) 选择“打开或关闭Windows功能”

    c) 导航到Internet信息服务>万维网服务>安全 并确保已选中Windows身份验证节点

    要在Windows服务器上启用Windows身份验证,请执行以下操作:

    a) 在服务器管理器中,选择Web服务器(IIS),然后单击添加角色服务

    b) 导航到Web服务器>安全性 并确保已选中Windows身份验证节点

  • 在操作窗格中,单击启用以使用Windows身份验证

  • 在身份验证页面上,选择匿名身份验证

  • 在操作窗格中,单击禁用以禁用匿名身份验证


  • 该属性只是意味着该方法(它所附加的)在运行任何逻辑之前需要授权用户。这和User.Identity.Name的值为空无关。Thx堆,请参阅我上面的评论。正如你所建议的那样添加了这个。然后,我会在该页面上显示一个身份验证web表单。因此,用户需要进行身份验证,但我想无缝地进行验证,也就是说,我们公司环境/lan中的每个人都可以看到此网站上的每个页面,但我公开对他们进行身份验证,但我可以获取他们的用户名。因此,我可以将身份验证方法从表单更改为“集成”,然后允许访问所有内容吗?再次使用Thx。出现身份验证web表单是因为MVC项目中的身份验证模式设置为Forms authentication。您需要在web.config文件中将模式设置为Windows身份验证。在IIS.Pure.Krome中进行更改比在IIS.Pure.Krome中进行更改要简单得多。很遗憾,您贬低了