2017-09-26 1 views
0

Ich lerne Angular 2 und versuche, es auf einem ASP MVC-Setup auszuführen. Ich folge dieser sehr guten Anleitung: https://www.codeproject.com/Articles/1181888/Angular-in-ASP-NET-MVC-Web-API-PartASP MVC Web API-Endpunkt, der 404 zurückgibt

Ich habe es sehr leicht modifiziert. Das Original soll eine Liste von Namen manipulieren, die von der Datenbank über den API-Endpunkt api/userapi erhalten wurden. Ich habe es so geändert, dass es zu einer Liste von Posts (wie für einen Blog oder etwas) vom Endpunkt api/postapi wird. Der eckige Teil des Projekts funktioniert so weit. Es ist der Teil von ASP.NET, der nicht richtig funktioniert.

Mit Blick auf die Konfiguration des ursprünglichen Projekts (die ich von diesem Link heruntergeladen und in Visual Studio 2017 getestet, um in Ordnung zu sein) und vergleichen mit meinem Experiment, konnte ich nicht erkennen, wo ich falsch konfiguriert haben könnte es.

Was könnte das Problem hier sein? Hier ist mein Code für die Web-API-Teil:

Global.asax.cs

using System.Web.Http; 
using System.Web.Mvc; 
using System.Web.Optimization; 
using System.Web.Routing; 

namespace WebAPI 
{ 
    public class WebApiApplication : System.Web.HttpApplication 
    { 
     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
     } 
    } 
} 

RouteConfig.cs

using System.Web.Mvc; 
using System.Web.Routing; 

namespace WebAPI 
{ 
    public class RouteConfig 
    { 
     public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{*anything}", // I am suspicious of this line but changing it doesn't fix it 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 
    } 

WebApiConfig.cs

using System.Net.Http.Headers; 
using System.Web.Http; 

namespace WebAPI 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API configuration and services 

      // Output as JSON instead of XML 
      config.Formatters.JsonFormatter.SupportedMediaTypes 
       .Add(new MediaTypeHeaderValue("application/octet-stream")); 

      // Web API routes 
      config.MapHttpAttributeRoutes(); 

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

PostsAPIController.cs

using WebAPI.Models; 
using System.Data.Entity; 
using System.Linq; 
using System.Net.Http; 
using System.Web.Http; 

namespace WebAPI.Controllers 
{ 
    [RoutePrefix("api/postapi")] //this did not help either 
    public class PostsAPIController : BaseAPIController 
    { 
     public HttpResponseMessage Get() 
     { 
      return ToJson(_db.TWebSitePostsSet.AsEnumerable()); 
     } 

     public HttpResponseMessage Post([FromBody]TWebSitePosts value) 
     { 
      _db.TWebSitePostsSet.Add(value); 
      return ToJson(_db.SaveChanges()); 
     } 

     public HttpResponseMessage Put(int id, [FromBody]TWebSitePosts value) 
     { 
      _db.Entry(value).State = EntityState.Modified; 
      return ToJson(_db.SaveChanges()); 
     } 

     public HttpResponseMessage Delete(int id) 
     { 
      _db.TWebSitePostsSet.Remove(_db.TWebSitePostsSet.FirstOrDefault(x => x.PostId == id)); 
      return ToJson(_db.SaveChanges()); 
     } 
    } 
} 
+0

müssen Sie hier Winkel Code für API-Aufruf gesetzt richtige Antwort geben .... –

+0

in Endpunkten verpasst https Verb Rest Anruf identifizieren> [HttpGet] [Httppost] ..... –

+0

Ich würde aber Es ist eine Menge Code und es hat nichts damit zu tun, warum die API selbst 404 zurückgibt, wenn man direkt darauf zugreift. –

Antwort

1

Ändern Sie diesen Code [RoutePrefix("api/postapi")] zu [Route("api/postapi")] und sehen, ob das einen Unterschied macht.
Und überprüfen Sie diese Seite. Attribute routing webapi-2

+0

Könnten Sie bitte erläutern * warum * das löst das OP-Problem? –

+0

Das funktioniert tatsächlich. Ich frage Pauls zweite Frage - warum funktioniert das, und warum benötigt mein Code es und der Tutorial-Code nicht, wenn er mit dem Code im Tutorial ziemlich identisch ist? –