Task< T>在WebApi中没有响应,但返回非Task工作
本文关键字:Task 响应 返回 工作 WebApi | 更新日期: 2023-09-27 18:03:59
我有一个方法,不会返回一个响应的浏览器,我已经尝试使用浏览器本身和chrome扩展邮差。
[AllowAnonymous]
[Route("getNotifications")]
[AcceptVerbs("Get", "Post")]
public Task<List<UserNotifications>> GetNotifications()
{
Task<List<UserNotifications>> userNotList = new Task<List<UserNotifications>>(() => new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
});
return userNotList;
}
但是,如果我改变方法不返回类型Task…
[AllowAnonymous]
[Route("getNotifications")]
[Authorize]
[AcceptVerbs("Get", "Post")]
public List<UserNotifications> GetNotifications()
{
var newstring = "";
List<UserNotifications> userNotList = new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
};
return userNotList;
}
每次
都得到以下结果[
{
"userId": "00000000-0000-0000-0000-000000000000",
"subject": "new message 1",
"messageText": "Message 1",
"messageTime": "2014-05-19T11:03:32.707957-04:00",
"status": true
},
{
"userId": "00000000-0000-0000-0000-000000000000",
"subject": "new message 2",
"messageText": "Message 2",
"messageTime": "2014-05-19T11:03:32.707957-04:00",
"status": true
},
{
"userId": "00000000-0000-0000-0000-000000000000",
"subject": "new message 3",
"messageText": "Message 3",
"messageTime": "2014-05-19T11:03:32.707957-04:00",
"status": true
}
]
为什么当我使用任务没有得到返回到浏览器上直接测试调用webapi服务?
编辑1
更改方法为this…因为某种原因,仍然坐在那里旋转着它的轮子
[AllowAnonymous]
[Route("getNotifications")]
[AcceptVerbs("Get", "Post")]
public async Task<List<UserNotifications>> GetNotifications()
{
Task<List<UserNotifications>> userNotList = new Task<List<UserNotifications>>(() => new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
});
return await userNotList;
}
然而,当我把它改成这个…
[AllowAnonymous]
[Route("getNotifications")]
[AcceptVerbs("Get", "Post")]
public Task<List<UserNotifications>> GetNotifications()
{
var newstring = "";
List<UserNotifications> userNotList = new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
};
return Task.FromResult(userNotList);
}
返回的结果很好…有人能说清楚这些方法的区别吗?我正在探索Task, asnyc和await的领域,但我仍然需要能够使用像POSTMan这样的东西直接测试对webapi的调用。
编辑2以下两种变化都有效…
[AllowAnonymous]
[Route("getNotifications")]
[AcceptVerbs("Get", "Post")]
public Task<List<UserNotifications>> GetNotifications()
{
var userNotList = Task.Run(
() => new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
});
return userNotList;
}
[AllowAnonymous]
[Route("getNotifications")]
[AcceptVerbs("Get", "Post")]
public async Task<List<UserNotifications>> GetNotifications()
{
var userNotList = Task.Run(
() => new List<UserNotifications>{
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 1",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 1"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 2",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 2"
},
new UserNotifications()
{
UserId = new Guid(),
MessageText = "Message 3",
MessageTime = DateTime.Now,
Status = true,
Subject = "new message 3"
}
});
return await userNotList;
}
您已经创建了任务,但是还没有实际启动它,尝试替换您的任务构造函数:
Task<List<UserNotifications>> userNotList = new Task<List<UserNotifications>>(...
与以下内容:
var userNotList = Task<List<UserNotifications>>.Run(
() => new List<UserNotifications>{...});
- 问题与编辑的例子,你添加
async/await
是相同的,你创建一个对象,知道做什么 ~Task
,但你实际上不告诉开始做那件事 ~Run
方法。 - 在第二个使用
Task.FromResult(userNotList)
的示例中,您已经有了结果列表,只需将其包装到完成的Task
中并返回它。
有关此主题的更多信息,我强烈建议您阅读基于任务的异步模式。