我写了一些简单的代码来说明问题。 控制器代码:
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>
答案 0 :(得分:0)
这听起来像一个奇怪的问题,虽然我还不能给你答案,但这可能有所帮助。
FormsAuthentication的工作原理是在名为.ASPXAUTH的浏览器上设置cookie。登录后,检查浏览器中的cookie并查找它。此外,您可以检查控制器操作方法中的Request属性以查找该cookie。这将是一个奇怪的编码值。您还可以使用类似Fiddler2的内容来确保在发布表单时发送cookie。
之前我遇到过这个问题,但它与跨域请求和machineKey不匹配问题有关。如果您的编辑操作都在同一个controller / project / URL / web.config中,那么管道中的某些内容可能正在删除cookie,或者在POST请求期间重新配置您的用户主体。你没有在项目的任何地方使用OWIN,对吧?并且除了HandleErrorAttribute之外没有其他全局过滤器?