1

Ich versuche, eine Web-API einzurichten, die RESTful-Dienste verwenden wird. Ich folge diesem Leitfaden.Einrichten einer WebAPI, Fiddler-Antwort ist eine HTML-Seite

Getting Started with ASP.NET Web API 2 (C#)

verfolge ich auch dieses Handbuch für Entity Framework einrichten.

Getting Started with Entity Framework 6 Code First using MVC 5

Wenn ich ein Composer in Fiddler laufen. Ich erhalte die Webseite für Home.aspx

Hier ist der Code für meinen Controller ist

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using WebServer.z_Repository; 
using WebServer.z_Models; 

namespace WebServer.z_Controllers 
{ 
    [Route("api/Locations")] 
    public class LocationsController : ApiController 
    { 
     // GET api/<controller> 
     static IlocationsRepository LocationsRepo; 

     public LocationsController(IlocationsRepository _repo) 
     { 
      if (_repo == null) { throw new ArgumentNullException("_repo"); } 
      LocationsRepo = _repo; 
     } 

     [HttpGet] 
     public IEnumerable<Location> GetAll() 
     { 
      return LocationsRepo.GetAll(); 
     } 
    } 
} 

ich auf den GetAll() einen Haltepunkt setzen und dass Haltepunkt wurde nie getroffen. Dies sagt mir, dass der Controller nicht irgendwo registriert ist. Aber der Führer sagt nichts darüber aus, wo er registriert werden sollte.

Ich habe eine Global.asax.cs Seite erstellt, obwohl dies nicht in der Anleitung ist. Aber ich bin mir nicht sicher, wohin ich von hier aus gehen soll.

-Code für Global.asax.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.SessionState; 

namespace WebServer 
{ 
    public class Global : System.Web.HttpApplication 
    { 

     protected void Application_Start(object sender, EventArgs e) 
     { 
     } 

     protected void Session_Start(object sender, EventArgs e) 
     { 

     } 

     protected void Application_BeginRequest(object sender, EventArgs e) 
     { 

     } 
    } 
} 

Hier ist ein Ausschnitt der Antwort im Fiddler zeigt Fiddler showing Home.aspx webpage

Antwort

2

Startseite zeigt, weil nach der URL, die Sie in Fiddler zeigte:

GET Home.aspx/api/locations 

es wird gesagt, zu gehen Home.aspx

Sie verwenden das Attribut-Routing, haben aber kein Setup dafür angezeigt.

Referenz: Attribute Routing in ASP.NET Web API 2

sollte Ihr Controller sein:

[RoutePrefix("api/Locations")] 
public class LocationsController : ApiController 
{ 
    IlocationsRepository locationsRepo; 

    public LocationsController(IlocationsRepository _repo) 
    { 
     if (_repo == null) { throw new ArgumentNullException("_repo"); } 
     this.locationsRepo = _repo; 
    } 

    //GET api/locations 
    [HttpGet] 
    [Route(""}] 
    public IEnumerable<Location> GetAll() 
    { 
     return locationsRepo.GetAll(); 
    } 
} 

Ihre WebApiConfig.cs:

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Attribute routing. 
     config.MapHttpAttributeRoutes(); 

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

und in Ihrem globalen, umfassen

protected void Application_Start() 
{ 
    // Pass a delegate to the Configure method. 
    GlobalConfiguration.Configure(WebApiConfig.Register); 
} 

N ow, um Standorte Web-api zu treffen, müssen Sie

GET api/location 
Host: localhost:59104 

die

zu http://localhost:59104/api/locations arbeitet rufen
+0

ich nicht sicher bin, wo die 'GlobalConfiguration' bekommen in Intellisense zu zeigen. Brauche ich eine using-Anweisung in 'Global.cs' –

+1

Haben Sie die Nuget-Pakete für WebAPI installiert? Wie auch immer, wenn Sie "WebApiConfig.cs" nicht haben, müssen Sie eines erstellen. Ja, Sie benötigen eine using-Anweisung in der globalen 'System.Web.Http'. Sie sollten wirklich den Artikel lesen, der in der Antwort verbunden ist. – Nkosi

+0

Hat alles gesagt, was du gesagt hast. Definitiv Fortschritte machen, aber Fiddler hat einen 500 internen Serverfehler. Ich werde dies als die Antwort markieren. –