【发布时间】:2020-07-03 06:36:08
【问题描述】:
我有一个允许用户登录的登录页面。在HandlieValidSubmit() 事件中,我检查用户名和密码是否与存储在数据库中的值匹配。
如果一切正常,我想在重定向到另一个站点之前将一些数据存储到 usercookie 中。这是 html/blazor 代码:
<EditForm>
<!-- standard form-controls here -->
</EditForm>
@code {
private Models.LoginUser _loginUser = new Models.LoginUser();
private EditContext _editContext;
private void HandleValidSubmit()
{
if (UserApi.Login(_loginUser.Mail, _loginUser.Password, out string error, out Guid? guid))
{
NaviationManager.NavigateTo($"/manage/{guid}");
}
}
}
Cookie 是在 Login-Function 中设置的,如下所示:
public DateTime SetCookie<T>(T data, TimeSpan expiration, bool httpOnly = true, bool secure = true)
{
DateTime expireDate = DateTime.Now.Add(expiration);
if (data == null) return DateTime.Now;
Type dataType = typeof(T);
var response = _httpContextAccessor.HttpContext.Response;
CookieOptions cookieOptions = new CookieOptions
{
HttpOnly = httpOnly,
Secure = secure,
Expires = expireDate
};
foreach (var property in dataType.GetProperties())
{
var storeInCookieAttribute = property.GetCustomAttribute<StoreInCookieAttribute>();
if (storeInCookieAttribute == null) continue;
response.Cookies.Append(BuildCookieKey(dataType.Name, property.Name), property.GetValue(data) as string, cookieOptions);
}
return expireDate;
}
恕我直言,这是标准的“how-to-write-cookies-in-netcore” - 方式。
当我尝试写入 cookie 时收到错误消息:
“无法修改响应标头,因为响应已经开始。”
我明白这个错误想告诉我什么。唉,我真的不知道如何防止这种情况。我预计此时响应根本不应该开始。
除了HandleValidSubmit(),我还需要使用其他事件吗?或者我可以在写入 cookie 之前清除 Response 而不会产生不良副作用吗?
【问题讨论】:
-
SetCookie
在代码中调用这个方法的地方!
标签: c# asp.net-core blazor