????? 2 ??????е???????
public RsvpResult AddRsvp(string name?? string email?? DateTime currentDateTime)
{
if (currentDateTime > RsvpDeadlineDateTime())
{
return new RsvpResult("Failed - Past deadline.");
}
var rsvp = new Rsvp()
{
DateCreated = currentDateTime??
EmailAddress = email??
Name = name
};
if (MaxAttendees.HasValue)
{
if (Rsvps.Count(r => !r.IsWaitlist) >= MaxAttendees.Value)
{
rsvp.IsWaitlist = true;
Rsvps.Add(rsvp);
return new RsvpResult("Waitlist");
}
}
Rsvps.Add(rsvp);
return new RsvpResult("Success");
}
??????????????????????????????????????? API ?????????С??????????????????????????????????????????????????е???????????????????????·?????????
?????????????
?????????????????????? ModelState ?????????Ч??????????????????????????д???????????????ó????У?????????ò??????????????????е????????
????[HttpPost]
????public IActionResult AddRsvp([FromBody]RsvpRequest rsvpRequest)
????{
????if (!ModelState.IsValid)
????{
????return HttpBadRequest(ModelState);
????}
??????? ModelState ??Ч?????????????????????????????????????????? Dinner ????????????????????? ID ?? Dinner ????????????“δ???”?????
????var dinner = _dinnerRepository.GetById(rsvpRequest.DinnerId);
????if (dinner == null)
????{
????return HttpNotFound("Dinner not found.");
????}
???????????Щ???????????????????????????????и????????????????????? Dinner ????? AddRsvp ????????????? OK ???????????????????????????????£?? dinner ??????? RSVP ???????
????var result = dinner.AddRsvp(rsvpRequest.Name??
????rsvpRequest.Email??
????_systemClock.Now);
????_dinnerRepository.Update(dinner);
????return Ok(result);
????}
??????????????? Dinner ?????????????????????????????????????????????????У???? currentDateTime ???????? _systemClock.Now????????? DI ?????????Σ???????????????????????????
?????????????????????????? DI ????????壬?????????????? ASP.NET ???????????????????????????乹?????????????κ??????????_systemClock ?????? IDateTime ????Σ???輸?д???????????????Ρ?
????public interface IDateTime
????{
????DateTime Now { get; }
????}
????public class MachineClockDateTime : IDateTime
????{
????public DateTime Now { get { return System.DateTime.Now; } }
????}
???????????????????? ASP.NET ???????????????? IDateTime ??????? MachineClockDateTime????????????? Startup ??? ConfigureServices ????????????????£??????κζ????????????Ч??????????????????????? MachineClockDateTime ?????????????????ó???
????services.AddSingleton<IDateTime?? MachineClockDateTime>();
???????????????????????????? RSVP ???????????????????????????????????????????????????? Dinner.AddRsvp ????????????????????????????????????????????????????????ж?β??????????????????Э??????????????????????????????????
????????????
??????????????????????? Dinner ?? DinnersController ??????????????????????????????????????“?μ?”?????????????????????????????????????????е?????????????????ó?????????????????????“?1?????????”???1??????? docs.asp.net ??????й? ASP.NET Core ????????????????????