2017-06-14 17 views
2

Mit WebAPI AngularJS Projekt und versuchen Funktion als `WebAPI "Die angeforderte Ressource nicht unterstützt HTTP-Methode‚DELETE"

 [HttpDelete] 
    public String DeleteCountry(string cntryId) 
    { 
     if (cntryId != null) 
     { 
      return repoCountry.DeleteCountry(Convert.ToInt32(cntryId)); 

     } 
     else 
     { 
      return "0"; 

     } 
    } 

js Funktion zu löschen ist

$http({ 
      method: "delete", 
      url: '/api/Country/DeleteCountry/', 
      dataType: "json", 
      data: { cntryId: cntryId } 
     }).then(function (response) {}); 

Hier bin ich Ausnahme bekommen

{"Message":"The requested resource does not support http method 'DELETE'."} 

Funktionen zum Einfügen, Aktualisieren und Abrufen funktionieren ordnungsgemäß y.Give eine Lösung und warum es nur für das Löschen passiert

+1

Können Sie versuchen, das "Daten" -Objekt zu entfernen und die cntryId an die URL anzuhängen? Meine Vermutung ist, dass das ASP.NET-Routing versucht, eine HttpDelete-Aktion ohne Parameter zu finden (da es in der URL keine gibt). – martennis

+1

Der Parameter ist nicht als [FromBody] markiert, also muss er in die URL eingefügt werden, wenn ich ihn richtig rufe. – Gusman

+0

@Gusman das ist richtig, Binding sucht standardmäßig nach "einfachen" Typen aus den URL-Abfrageparametern. – phuzi

Antwort

2

Schmücken Sie Ihre Methode mit dem Route Attribute (sehe ich mir mehr Kontrolle auf dem Routing-Verhalten in Web-API) und Ihre Daten Parameter wie der Konstruktor args in diesem Format übergeben: [HttpDelete, Route("{cntryId}")

[HttpDelete, Route("{cntryId}")] 
public String DeleteCountry(string cntryId) 
    { 
    //.... 
    } 

in Sie Winkelregler Sie dies nur tun können:

$http.delete('/api/Country/' + cntryId).then(function (response) { 
      //if you're waiting some response 
     }) 
+0

Sie brauchen {cntryId} nicht, wenn Sie die Webapiconfig –

+0

@BRAHIMKamel nicht geändert haben, würden Sie das Routenattribut benötigen, sofern Sie nicht die Standardroute von {id} auf {cntryId} in der API-Konfiguration geändert haben. Andernfalls werden alle Parameter, die nicht als 'ID' bezeichnet werden, als Abfragezeichenfolge weitergeleitet. – ATerry

1

ist kein Webapi-Problem ist mehr das Format Ihrer Abfrage. Die Nachricht sagt, dass does not support http method 'DELETE', weil die Webapi-Methode löscht eine ID als Parameter erwartet. und die Route hat folgendes Format routeTemplate: "api/{controller}/{id}", Ihr Problem zu lösen versucht Fiedler zu benutzen, um Ihre Anforderung zu abfangen und sicherzustellen, dass Ihre Löschanforderung gesendet wird, als '/api/Country/DeleteCountry/'+cntryId,

0

Option:

$http({ 
    method: "delete", 
    url: '/api/Country/Country?cntryId=' + cntryId, 
}).then(function (response) {}); 

Option 2:

public String DeleteDeleteCountry([FromBody]string cntryId) 
{ 
    if (cntryId != null) 
    { 
     return repoCountry.DeleteCountry(Convert.ToInt32(cntryId)); 

    } 
    else 
    { 
     return "0"; 

    } 
} 

Beste Option:

API

[Route("{countryId}")] 
public IHttpActionResult Delete(int countryId) 
{ 
    try 
    { 
     repoCountry.DeleteCountry(countryId); 
    } 
    catch (RepoException ex) 
    { 
     if (ex == notfound) 
      this.NotFound(); 
     if (ex == cantdelete) 
      this.Confict(); 
     this.InternalServerError(ex.message); 
    } 
    return this.Ok(); 
} 

Javascript

$http({ 
    method: "delete", 
    url: '/api/country/' + cntryId, 
}).then(function (response) {}); 
0

Angenommen, Sie haben das Standard-Routing nicht geändert. Derselbe Fehler kann auftreten, wenn Sie das Attribut [HttpDelete] für die Aktion in webAPI nicht deklarieren können. Bitte versuchen Sie folgendes

[HttpDelete] 
public IHttpActionResult Delete(int id) 
{ 
} 
Verwandte Themen