2017-06-26 2 views
0

Ich verwende das Web Api 2 Framework, um HTTP-Dienste für eine eckige Website bereitzustellen. Ich folgte die offizielle guide und alles scheint so arbeiten, mit der Ausnahme, dass, wenn ich GET nennen, POST ... Methoden aus POSTMAN das Ergebnis ist immer das gleiche: The resource cannot be found.Web-API-Routing mit Entity-Framework

Hier sind die Routing-Konfigurationen:

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

Der Code des Controllers (mein Controller heißt EndpointModelsController) ist der automatisch generierte Code von Visual Studio. Ich suchte nach einer Lösung und ich versuchte mit Routing-Attribute in diesem guide aber das Ergebnis war das gleiche. In meinem Fall läuft der Web-Service auf Port 54800 und ich verwende IISEXPRESS: ein URL-Beispiel könnte dies http://localhost:54800/api/EndpointModels für eine GET-Anfrage ohne Parameter sein.

Ist die URL falsch oder denken Sie, dass das Problem im Code liegt? Was könnten die Ursachen sein?

Vielen Dank.

[bearbeiten]

Hier ist der Code des Controllers: Ich habe nur hinzugefügt [HttpGet] Attribut.

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Threading.Tasks; 
using System.Web.Http; 
using System.Web.Http.Description; 
using CodeProbe.WebApp.Models; 

namespace CodeProbe.WebApp.Controllers 
{ 
    public class EndpointModelsController : ApiController 
    { 
     private EndpointContext db = new EndpointContext(); 

     // GET: api/EndpointModels 
     [HttpGet] 
     public IQueryable<EndpointModels> GetEndPoint() 
     { 
      return db.EndPoint; 
     } 

     // GET: api/EndpointModels/5 
     [ResponseType(typeof(EndpointModels))] 
     [HttpGet] 
     public async Task<IHttpActionResult> GetEndpointModels(string id) 
     { 
      EndpointModels endpointModels = await db.EndPoint.FindAsync(id); 
      if (endpointModels == null) 
      { 
       return NotFound(); 
      } 

      return Ok(endpointModels); 
     } 

     // PUT: api/EndpointModels/5 
     [ResponseType(typeof(void))] 
     public async Task<IHttpActionResult> PutEndpointModels(string id, EndpointModels endpointModels) 
     { 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      if (id != endpointModels.ServiceName) 
      { 
       return BadRequest(); 
      } 

      db.Entry(endpointModels).State = EntityState.Modified; 

      try 
      { 
       await db.SaveChangesAsync(); 
      } 
      catch (DbUpdateConcurrencyException) 
      { 
       if (!EndpointModelsExists(id)) 
       { 
        return NotFound(); 
       } 
       else 
       { 
        throw; 
       } 
      } 

      return StatusCode(HttpStatusCode.NoContent); 
     } 

     // POST: api/EndpointModels 
     [ResponseType(typeof(EndpointModels))] 
     public async Task<IHttpActionResult> PostEndpointModels(EndpointModels endpointModels) 
     { 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      db.EndPoint.Add(endpointModels); 

      try 
      { 
       await db.SaveChangesAsync(); 
      } 
      catch (DbUpdateException) 
      { 
       if (EndpointModelsExists(endpointModels.ServiceName)) 
       { 
        return Conflict(); 
       } 
       else 
       { 
        throw; 
       } 
      } 

      return CreatedAtRoute("DefaultApi", new { id = endpointModels.ServiceName }, endpointModels); 
     } 

     // DELETE: api/EndpointModels/5 
     [ResponseType(typeof(EndpointModels))] 
     public async Task<IHttpActionResult> DeleteEndpointModels(string id) 
     { 
      EndpointModels endpointModels = await db.EndPoint.FindAsync(id); 
      if (endpointModels == null) 
      { 
       return NotFound(); 
      } 

      db.EndPoint.Remove(endpointModels); 
      await db.SaveChangesAsync(); 

      return Ok(endpointModels); 
     } 

     protected override void Dispose(bool disposing) 
     { 
      if (disposing) 
      { 
       db.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     private bool EndpointModelsExists(string id) 
     { 
      return db.EndPoint.Count(e => e.ServiceName == id) > 0; 
     } 
    } 
} 
+0

Es scheint alles korrekt ist. Können Sie bitte überprüfen, ob Sie eine Methode mit der Option "Als Präfix oder HTTPGet-Attribut dekorieren" für eine beliebige Methode in diesem Controller verwenden. –

+0

Theoretisch, wenn meine Methode mit Get beginnt, muss sie als eine GET-Anfrage betrachtet werden. Nur um sicher zu sein, hatte ich bereits das HTTPGet-Attribut hinzugefügt und versucht, die Route zu ändern (mit Route-Attribut), aber das Problem bleibt bestehen. –

+0

Hallo Marco, ich habe es ausprobiert und es gibt kein Problem. Können Sie Ihren Code teilen, den Sie im Controller geschrieben haben? –

Antwort

1

im Konfigurations

 //cross Domain 
     var cors = new EnableCorsAttribute("*", "*", "*"); 
     config.EnableCors(cors); 

Dieses nuget Paket Versuchen Install-Package Microsoft.AspNetCore.Cors

+0

Das funktioniert nicht. Danke trotzdem! –

Verwandte Themen