2016-09-09 5 views
1

Ich versuche derzeit, eine einfache eckige js-Anwendung zu entwickeln. Ich versuche, Daten vom Client auf Web-API zu posten. Allerdings bekomme ich 404 Fehler, wenn ich Post Anfrage von eckigen App feuern.

Unten ist meine Post-Anforderung,

$http.post('/api/LoadApi/', jsonData).then(function (result) { 
       console.log(result.data); 
      }) 
      .catch(function (error) { 
      }); 

wo jsonData ein gültiges JSON-Daten sind.

Mein Web-api-Code ist dies,

public class LoadApiController : ApiController 
{ 
    [HttpPost] 
    public HttpResponseMessage LoadData(object dataToLoad) 
    { 
     var response = Request.CreateResponse(HttpStatusCode.Created); 

     return response; 
    } 
} 

Meine Web-api Route Config das ist,

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{dataToLoad}" 
      ); 

Allerdings, wenn ich den Code ausführen, es wirft einen Fehler

Serverfehler in '/' Anwendung. Die Ressource kann nicht gefunden werden. Beschreibung: HTTP 404. Die Ressource, nach der Sie suchen (oder eine ihrer Abhängigkeiten), wurde möglicherweise entfernt, der Name wurde geändert oder ist vorübergehend nicht verfügbar. Bitte überprüfen Sie die folgende URL und vergewissern Sie sich, dass sie richtig geschrieben ist. Angeforderte URL:/api/LoadApi/

Kann jemand zeigen, was das Problem mit dem obigen Code ist?

Es sagt, es gibt ein Problem mit der URL. Die generierte URL ist http://localhost:14154/api/LoadApi/, die korrekt aussieht.

+0

Ihre Routenvorlage konnte nicht funktionieren, weil sie nicht definiert, welche Aktion auf dem Controller übereinstimmen soll. – Claies

+0

Außerdem verwenden Sie nicht 'POST', um Daten über die URL-Zeichenfolge zu senden. – Claies

Antwort

1

Das Problem ist mit Ihrer Routendefinition und wie Sie versuchen, Daten an Ihre Controller-Methode zu senden. Ich würde empfehlen, attributbasiertes Routing zu verwenden. In Ihrem Web-API-Controller dies tun:

[RoutePrefix("api/LoadApi")] 
public class LoadApiController : ApiController 
{ 
    [HttpPost] 
    [Route("loadData")] 
    public HttpResponseMessage LoadData(object dataToLoad) 
    { 
     var response = Request.CreateResponse(HttpStatusCode.Created); 
     return response; 
    } 
} 

Ändern der Application_Start() Methode in Global.asax.cs dazu:

protected void Application_Start() 
{ 
    GlobalConfiguration.Configure(WebApiConfig.Register); 
} 

sicher WebApiConfig.cs in App_Start Stellen hat eine Register() Methode wie folgt:

public static void Register(HttpConfiguration config) 
{ 
    config.MapHttpAttributeRoutes(); 
} 

Und schließlich ändern Sie Ihren $http.post Anruf zu diesem:

$http.post('/api/LoadApi/loadData', jsonData).then([...]); 
+0

Danke !! Die Änderungen haben funktioniert ... Ich habe ein falsches Routing durchgeführt ... –