使用User.Identity.Name获取MVC3“Internet”应用程序中的UserName

时间:2012-09-06 19:00:51

标签: asp.net asp.net-mvc asp.net-mvc-3

每当我尝试在控制器中检索登录的用户名时,我都会收到一个空字符串。当我第一次创建应用程序时,我选择了“Internet应用程序”模板。我还删除了默认帐户控制器,帐户模型和_logon视图,因为我不需要它们。我正在使用自己的样式,所以我也从项目中删除了site.css。

在使用web.config一段时间之后,我发现如果我将web.config中的身份验证模式更改为windows,“User.Identity.Name”实际上有效。如果我将它保留在“表单”身份验证模式下,每当我尝试获取用户名时,我只会得到一个空字符串。

最近,我将身份验证模式更改为Windows并在我的某个控制器中使用User.Identity.Name来获取用户名,但每当我运行应用程序时,我在浏览器上收到错误,说明“localhost / Account”找不到/ LogOn / ...“。 (不是指向我通常的观点)(我也没有对Global.asax做任何改动。)

如果我将身份验证模式更改回表单,我的视图工作正常,但我没有看到用户名(只是一个空字符串)。无论如何,我可以找到解决这个问题的方法。路由或其他什么问题?我无法使用“Intranet Application”模板重新开始。

我是MVC的初学者,所以任何帮助都会非常感激。

由于

3 个答案:

答案 0 :(得分:2)

如果您使用的是asp.net mvc,请尝试System.Environment.UserName

在你的web.config中,使用

<authentication mode="Windows" />
<identity impersonate="true" />

您获得的错误是因为您删除了登录视图,但仍然必须将其引用到应用程序中的某个位置,因此如果您不需要登录视图,请确保从代码中删除所有重新启用视图。< / p>

答案 1 :(得分:0)

Internet应用程序默认使用表单身份验证。 Windows身份验证的目的是用于Intranet,其中Web应用程序在Windows用户下运行。然后验证“自动”工作。

如果您想拥有注册用户的互联网应用程序,您应该在web.config中添加以下配置:

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

然后你需要一个AccountController(在默认模板中,你可能已经删除)和控制器内的登录操作。您还需要帐户控制器的所有视图(登录,注册,更改密码等)。最好的是你创建一个新的互联网应用程序并检查那里的一切。只需将您需要的东西复制到您的应用程序中即可。

您还需要一个用户数据库。默认情况下使用带有标准表和存储过程的快速数据库。如果需要,您可以使用自己的表,然后必须重写帐户控制器中的方法或编写自己的成员资格提供程序。

您没有看到用户名的原因是您没有登录。

编辑:如果要显示Windows用户名,则应将身份验证模式设置为Windows(或者只删除身份验证部分,因为它是默认设置)。然后,您可以访问用户名。但是你必须删除标签。

<authentication mode="Windows" /> 

答案 2 :(得分:0)

听起来你甚至不首先进行身份验证,所以没有用户名:

@if (Request.IsAuthenticated) {
    <span>@User.Identity.Name</span>
}
else {
    <span>You aren't authenticated</span>
}