【发布时间】:2019-09-27 05:09:33
【问题描述】:
我正在做学校项目,我正在尝试在我的存储库类中实现异步方法,并在我的 POST 方法的 API 中收到此错误:参数 1:无法从 'System.Threading.Tasks.任务'到 Project.Models.Booking。
有人可以帮我解决这个错误吗?
这就是我的存储库方法的样子:
public async Task<Booking>CreateBooking(Booking inBooking) {
Booking booking = new Booking();
booking.BookingId = ApplicationDbContext.Bookings.Count();
booking.UserName = inBooking.UserName;
booking.UserMail = inBooking.UserMail;
booking.UserMobile = inBooking.UserMobile;
booking.Available = false;
booking.StartTime = inBooking.StartTime;
booking.EndTime = inBooking.EndTime;
booking.Date = inBooking.Date;
Add(booking);
return await Task.FromResult(booking);
//return booking;
}
这就是我的 Post-method 的样子:
[Route("api/PostBooking")]
[HttpPost]
public async Task<IHttpActionResult> PostBooking(BookingSystemServiceBookingViewModel inBooking)
{
if (!ModelState.IsValid)
{
return BadRequest("Invalid data");
}
var booking = inBooking.booking;
booking.StartTime = inBooking.startTime;
booking.EndTime = inBooking.startTime.AddMinutes(inBooking.service.Duration);
uw.Services.AddBooking(uw.Bookings.CreateBooking(booking), inBooking.service.ServiceId);
uw.Complete();
return Ok();
}
我在以下位置收到错误消息:uw.Services.AddBooking(uw.Bookings.CreateBooking(booking), inBooking.service.ServiceId);`
【问题讨论】:
-
要返回
Task<>方法的结果,您需要await或.Result。 -
uw.Services.AddBooking(await uw.Bookings.CreateBooking(booking), inBooking.service.ServiceId); -
这也是我遵循在方法名称末尾添加后缀 Async 的建议的原因之一...... :)
-
通常的建议是在异步函数的名称后面加上“Async”。如果你这样做了,你就不太可能忘记“等待”他们,就像你在这里所做的那样。
-
从
return await Task.FromResult(booking);中删除“await”,从public async Task<Booking>CreateBooking(Booking inBooking)中删除“async”,你应该会很好。
标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-5