发布任何页面后,asp.net mvc User.Identity.Name为空

时间:2014-01-25 13:53:47

标签: asp.net-mvc

我写了一些简单的代码来说明问题。 控制器代码:

    public ActionResult Edit()
    {
        string un = User.Identity.Name;
        return View();
    }
    [HttpPost]
    public ActionResult Edit(int? dummy)
    {
        string un = User.Identity.Name; // <-- here it's empty string
        return View();
    }

Edit.cshtml视图代码:

@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <input type="submit" value="Submit" />
}

登录后User.Identity.Name不为空,我转到编辑页面。 但是在我提交编辑页面(我进行HTTP POST)后,User.Identity.Name变为空字符串,无论我访问哪个页面,它都是空字符串。

在Web.config中我有:

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

1 个答案:

答案 0 :(得分:0)

这听起来像一个奇怪的问题,虽然我还不能给你答案,但这可能有所帮助。

FormsAuthentication的工作原理是在名为.ASPXAUTH的浏览器上设置cookie。登录后,检查浏览器中的cookie并查找它。此外,您可以检查控制器操作方法中的Request属性以查找该cookie。这将是一个奇怪的编码值。您还可以使用类似Fiddler2的内容来确保在发布表单时发送cookie。

之前我遇到过这个问题,但它与跨域请求和machineKey不匹配问题有关。如果您的编辑操作都在同一个controller / project / URL / web.config中,那么管道中的某些内容可能正在删除cookie,或者在POST请求期间重新配置您的用户主体。你没有在项目的任何地方使用OWIN,对吧?并且除了HandleErrorAttribute之外没有其他全局过滤器?