Nar*_*ria 1 .net c# session asynchronous async-await
我是MVC5的新手,并尝试在控制器中使用异步方法实现会话.我创建了这样的方法
public async Task<ViewResult> Index()
{
string currentUserId = User.Identity.GetUserId();
var userId = Convert.ToInt64(HttpContext.Session["UserId"]);
var userDetail = await service.GetBy(currentUserId),
}
Run Code Online (Sandbox Code Playgroud)
此会话事件始终失败,并显示以下消息
Application中的服务器错误.无法将类型为'System.Threading.Tasks.Task`1 [System.Int64]'的对象强制转换为'System.IConvertible'.
(抱歉,由于此网站上没有足够的声誉点,我无法发布实际错误的屏幕截图)
我也试过这样做
var userId = await Task<long>.FromResult(Convert.ToInt64(HttpContext.Session["UserId"]));
Run Code Online (Sandbox Code Playgroud)
和
var userId = await (Session["UserId"] as Task<long>);
Run Code Online (Sandbox Code Playgroud)
和
var userId = await Convert.ToInt64(HttpContext.Session["UserId"]);
Run Code Online (Sandbox Code Playgroud)
但是,它总是给出相同的信息.有人可以指出我正确的方法.此外,如果我们不能在异步方法中使用会话,那么什么是最好的解决方案.
错误意味着HttpContext.Session["UserId"]
存储Task
而不是实际存储int64
.这意味着您的代码中的某个位置,您将userId存储在会话中,您可能忘记等待其结果的任务.
可能看起来像:
HttpContext.Session["UserId"] = GetUserIdAsync();
Run Code Online (Sandbox Code Playgroud)
代替:
HttpContext.Session["UserId"] = await GetUserIdAsync();
Run Code Online (Sandbox Code Playgroud)
您也可以尝试等待存储的任务(使用错误的类型转换):
var userId = await ((Task<Int64>)HttpContext.Session["UserId"]);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1728 次 |
最近记录: |