2017-02-01 2 views
3

Wenn ich versuche, einige Daten mit dem Parameter erhalten (Typ DateTime) von Web-API, erhalte ich Antwort mit Fehler 404:Keine HTTP-Ressource wurde gefunden, dass die Anforderungs-URI übereinstimmt - Web API + Angular

Nachricht : "Es wurde keine HTTP-Ressource gefunden, die mit der Anfrage-URI übereinstimmt 'http://localhost:53544/api/reservations/GetReservationByDate?date=Tue Jan 31 2017 16:00:00 GMT + 0100'." MessageDetail :

Ich verwende AngularJS für diese "Keine Route einen Controller-Namen bereitstellt wurde gefunden 'http://localhost:53544/api/reservations/GetReservationByDate?date=Tue 31. Januar 2017 16.00.00 GMT + 0100' Anforderungs-URI entsprechen". In anderen Controllern, wo ich Methoden mit Parameter aber keine DateTime habe. Ist es vielleicht ein Problem? Vor diesem hatte ich Fehler

400 Bad Request

und Konfiguration Routing mir hilft.

Es ist alles meine Code - Methode in der Steuerung:

[HttpGet] 
[ActionName("GetReservationByDate")] 
[ResponseType(typeof(Reservation))] 
public IHttpActionResult GetReservationByDate(DateTime date) 
{ 
    var reservation = db.Reservations.Where(d => d.Date.Equals(date)); 
    if (reservation == null) 
    { 
     return NotFound(); 
    } 
    return Ok(reservation); 
} 

RouteConfig.cs:

config.Routes.MapHttpRoute(
    name: "CustomApi", 
    routeTemplate: "api/Reservations/GetReservationByDate/{date}", 
    defaults: new { date = RouteParameter.Optional} 
); 

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

und Verfahren von AngularJS:

this.GetReservation = function (date) { 
    var promise = $http({ 
     method: 'GET', 
     url: 'api/reservations/GetReservationByDate?date=' + date, 
     config: { 
      params: { 
       "date": date 
      } 
     } 
    }) 
    .then(function (response) { 
     return response; 
    }, 
    function (response) { 
     return response; 
    }); 
    return promise; 
} 

ich andere Kombination versucht, mit FromUri , FromBody, aber das Ergebnis ist immer das Gleiche.

Antwort

0

Sie müssen die Standardeinstellungen für Controller und Aktion festlegen, da in der Routenvorlage kein Vorlagenparameter enthalten ist.

config.Routes.MapHttpRoute(
    name: "CustomApi", 
    routeTemplate: "api/Reservations/GetReservationByDate/{date}", 
    defaults: new { controller = "Reservations", action = "GetReservationByDate", date = RouteParameter.Optional} 
); 

Aktualisieren Sie die Aktion für schlechte Daten

[HttpGet] 
[ActionName("GetReservationByDate")] 
[ResponseType(typeof(Reservation))] 
public IHttpActionResult GetReservationByDate(DateTime? date) {  
    if(date.HasValue) { 
     var reservation = db.Reservations.Where(d => d.Value.Date.Equals(date)).ToList(); 
     if (reservation.Count == 0) { 
      return NotFound(); 
     } 
     return Ok(reservation); 
    } 
    return BadRequest(); 
} 

auch die Formatierung der Datums Client-Seite versuchen, damit sicherzustellen, dass es im richtigen Format gesendet wird

this.GetReservation = function (date) { 
    var jsonDate = date.toJSON(); 
    var promise = $http({ 
     method: 'GET', 
     url: 'api/reservations/GetReservationByDate?date=' + jsonDate, 
     config: { 
      params: { 
       "date": jsonDate 
      } 
     } 
    }) 
    .then(function (response) { 
     return response; 
    }, 
    function (response) { 
     return response; 
    }); 
    return promise; 
} 
+0

ich es geändert wie dies, aber zeigt dann Fehler 400 Ungültige Anforderung: Nachricht : "Die Anfrage ist ungültig." MessageDetail : "Das Parameterverzeichnis enthält einen Nulleintrag für den Parameter 'Datum' des nicht nullfähigen Typs 'System.DateTime' für die Methode 'System.Web.Http.IHttpActionResult GetReservationByDate (System.DateTime)' in 'ServiceSchedule.Controllers' .ReservationsController '. Ein optionaler Parameter muss ein Referenztyp, ein Nullable-Typ oder ein optionaler Parameter sein. " – ryckoshet

+0

Rechts. Ich weiss, was das heisst. Da der date-Parameter optional ist, bedeutet dies, dass die Möglichkeit besteht, dass kein Datum angegeben werden kann (daher null), der Parameter in der Aktion jedoch nicht nullfähig ist, da es sich um eine DateTime handelt. Folgen Sie den Anweisungen in der Ausnahmebedingungsnachricht 'Ein optionaler Parameter muss ein Referenztyp, ein Nullwerttyp oder ein optionaler Parameter sein.' – Nkosi

+0

Und was ist die Lösung? Art des Parameters ändern ..? – ryckoshet

Verwandte Themen