1

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

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

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

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

我是 MVC 的初学者,所以任何帮助将不胜感激。

谢谢

4

3 回答 3

2

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

在您的 web.config 中,使用

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

你得到的错误是因为你删除了一个登录视图,它仍然必须在你的应用程序中的某个地方被引用,所以如果你不需要登录视图,请确保你从你的代码中删除了所有对它的引用。

于 2012-09-06T19:04:52.790 回答
0

听起来您甚至没有先进行身份验证,因此没有用户名:

@if (Request.IsAuthenticated) {
    <span>@User.Identity.Name</span>
}
else {
    <span>You aren't authenticated</span>
}
于 2012-09-06T19:49:20.420 回答
0

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

如果你想拥有一个注册用户的互联网应用程序,你应该在 web.config 中放入以下配置:

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

然后您需要一个 AccountController(在默认模板中存在并且您可能已删除)和控制器中的 Logon 操作。您还需要帐户控制器的所有视图(登录、注册、更改密码等)。最好的办法是创建一个新的 Internet 应用程序并检查那里的所有内容。只需将您需要的内容复制到您的应用程序中即可。

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

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

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

<authentication mode="Windows" /> 
于 2012-09-06T19:23:11.727 回答