2017-06-08 4 views
2

Ich lerne Web-API. gerade durch einige Artikel gegangen und gefunden Attribut Routing kann auf andere Weise erfolgen.Web-API: andere Art der Attribut-Routing

den Code Siehe verwendet:

[RoutePrefix("Movie")] 
public class HomeController : Controller 
{ 
     //Route: Movie/Index 
     [Route] 
     public ActionResult Index() 
     { 
      ViewBag.Message = "You are in Home Index"; 
      return View(); 
     } 

     //Route: NewRoute/About 
     [Route("~/NewRoute/About")] 
     public ActionResult About() 
     { 
      ViewBag.Message = "You successfully reached NEWRoute/About route"; 
      return View(); 
     } 
} 

in obigem Beispiel der Autor Attribut Route die Route für Aktion zu definieren.

sehen diese eine wieder

[GET("productid/{id?}")] 
public HttpResponseMessage Get(int id) 
{ 
    var product = _productServices.GetProductById(id); 
    if (product != null) 
     return Request.CreateResponse(HttpStatusCode.OK, product); 
    return Request.CreateErrorResponse(HttpStatusCode.NotFound, "No product found for this id"); 
} 

Hier der Autor nicht Route Attribut eher http Verben verwenden Route zu definieren.

Also sag mir, welcher Ansatz richtig ist?

Eine weitere Frage, die durch Attribut-Routine können wir einen anderen Namen für die Aktion dann geben, wenn man Action Name Attribut verwenden sollte, um der Aktion einen anderen Namen zu geben?

Wenn wir Aktion Name durch Attribut-Routing ändern können, warum sollte man Action Name Attribut verwenden, um der Aktion einen anderen Namen zu geben?

+0

Sie können auch das [HttpGet] Attribut verwenden, um http Verb zu definieren. Ich benutze das und [Route()], weil ich den Namen der Aktionsmethode im Routing habe, imo, das die beste Lesbarkeit bietet, aber Unordnung verursacht. – Thor

Antwort

0

Ich glaube, [Route], RoutePrefix sind diese Attribute, die uns helfen, die URL zu definieren, die wir dem Clientbrowser zur Verfügung stellen.

Antwort von

Patrick Hofman ist gut erklärend.

Um klar zu zeigen, wie jede geschriebene Methode funktioniert, gibt es HTTP Verben zur Verfügung gestellt. Kürzlich habe ich eine kleine Web-API-Lösung entwickelt, bei der ich das Routing-Szenario mit mehreren Attributen getestet und getestet habe.Hier sind sie:

[ActionName("GetIndex")] 
[HttpGet] 
public HttpResponseMessage IndexIdById(string id) 
{ 
... other relative code here ... 
var response = new HttpResponseMessage(HttpStatusCode.OK); 
return response; 
} 

Wenn die Methodennamen ohne Get Präfix geschrieben wird (gemäß obigem Beispiel) wäre es genaue Angabe geben [HttpGet] Verb angeben, um zu zeigen, was die Methode tut. Hier ist diese Methode eine Get Methode.

Auch mit einem solchen Methodennamen wie oben wäre es besser, einen Aliasnamen anzugeben. [ActionName("GetIndex")]

Um eine solche Methode mit Routenkonfiguration zu unterstützen, können wir eine Route bereitstellen, die den Aktionsnamen mit einem anderen Teil der URL in WebApiConfig.cs verknüpft. Beispiel wie unten: -

config.Routes.MapHttpRoute(
name: "GetIndex", 
routeTemplate: "api/{controller}/{action}/{id}", 
defaults: null 
); 

Ich schätze andere Ratschläge oder Verbesserungen zu dieser Antwort. Da diese Strategie zum Konfigurieren meiner Web-API für mich funktionierte.

+0

danke für die Antwort. Sag mir, wie wird die URL für diese Aktion 'IndexIdById' sein? –

+0

Die URL sollte sein: - wenn sie auf ** localhost ** läuft. ** http: // localhost: [Portnummer]/api/services/GetIndex/10000 ** , wo es um die Konfiguration in widerspiegelt: - Dienste = {Controller} GetIndex = {action} - dies ist ein Alias Ich setze als [ActionName ("GetIndex")] über Aktion 10000 = {id} – Binoy

1

[Route] macht eine Aktion nach außen sichtbar. Es wird der Aktionsname (Methodenname) als Name für die Route verwendet. Es kann den RoutePrefix oder den Controller-Namen verwenden, um die URL zu erstellen.

Wenn Sie [Route(template)] einen Wert angeben, wird diese (relative) URL zum Erstellen der URL verwendet, für die die Aktion verfügbar ist.

Da Routen standardmäßig nur über GET zugänglich sind, können Sie HttpGet(template) und Route auf die gleiche Weise verwenden. Wenn Sie zum Beispiel Route zusammen mit HttpGet und HttpPost verwenden, wird diese Route über diese Verben verfügbar sein.

So können Sie ein wenig mischen, je nach Ihren Bedürfnissen und Vorlieben.

+0

danke für die Antwort, aber es tut mir leid, ich habe nicht verstanden, was Sie sagten wie 'Da Routen standardmäßig nur über GET zugänglich sind, können Sie HttpGet (Vorlage) und Route auf die gleiche Weise verwenden. Wenn Sie zum Beispiel Route zusammen mit HttpGet und HttpPost verwenden, wird diese Route über diese Verben verfügbar sein. So würden Sie diese Punkte mit Beispiel verdeutlichen, was Sie zu sagen versuchen. danke –

+0

Ich habe einige Zeit gesehen Leute verwenden mehrere Route für die gleiche Aktion ...... wenn man diesen Ansatz folgen sollte? nur überprüfen Sie diese URL https://www.codeproject.com/Articles/1005485/RESTful-Day-sharp-Security-in-Web-APIs-Basic#_Toc423441909 dort müssen Sie mehrere Route feststellen, hat für einzelne Aktion verwendet worden ... .Warum? –

Verwandte Themen