2017-02-13 2 views
1

Ich wollte teilen, wie ich mit DateTime Parameter in meinem .NET Core MVC Controller arbeitete. Ich habe dies verwendet, um eine Datumsbereich-Filterfunktion in meiner Lösung zu erstellen.ASP.Net Core MVC DateTime Parameter

Falscher

[HttpGet, Route("dateRange/{start}/{end}")] 
public IActionResult Get(DateTime start, DateTime end) 
{ 
    //invalid values (e.g. /bogus/52) get converted to a valid DateTime value of 1/1/0001 00:00:00.001 
    if (start != DateTime.MinValue && end != DateTime.MinValue) 
    {    
     if (start < end) 
     { 
      return Json(_Repo.GetByDateRange(start, end)); 
     } 
    } 
    return BadRequest("Invalid Date Range"); 
} 

Antwort

2

Der bessere Weg:

[HttpGet, Route("dateRange/{start:datetime}/{end:datetime}")] 
public IActionResult Get(DateTime start, DateTime end) 
{    
    if (start < end) 
    { 
     return Json(_Repo.GetByDateRange(start, end)); 
    } 
    return BadRequest("Invalid Date Range"); 
} 

Der Schlüssel ist der: Datetime-Constraint in der Route-Annotation. Dies weist .NET an, DateTime zu erzwingen und bei ungültigen Param-Werten automatisch eine 404-Antwort zurückzugeben. Dies ist viel sauberer als die Überprüfung der Eingabe und die Behandlung schlechter Antworten im Code.