Ich verwende WebAPI 2.2, attributbasiertes Routing und ich kann nicht herausfinden, warum Abfragezeichenfolgen nicht funktionieren oder wie sie aktiviert werden. Ich habe andere SO-Fragen dazu gelesen, aber sie haben sich nicht ganz auf mich übertragen.WebAPI 2.2, Attributbasiertes Routing und Abfragezeichenfolgen
Hier ist eine wirklich einfache APIController:
[Route("api/HelloMessage")]
public async Task<IHttpActionResult> Get()
{
var result = await Task.FromResult(new string[] { "Hello", "World" }).ConfigureAwait(false);
return Ok(result);
}
[Route("api/HelloMessage/{id}")]
public async Task<IHttpActionResult> Get(int id)
{
var result = await Task.FromResult($"Hello {id}").ConfigureAwait(false);
return Ok(result);
}
(auch, um WebApiConfig.cs gehen, und kommentieren Sie die Standardroute aus, die mit MapHttpRoute erstellt wird)
Wenn ich es mit http://localhost/api/HelloMessage/1 getroffen, es funktioniert super.
Allerdings, wenn ich es mit http://localhost/api/HelloMessage?id=1 traf, bindet es sich an die parameterlose Version. Wo gehe ich falsch?
Eine seltsame Sache:
Wenn ich den MapHttpRoute Code erneut aktiviert, dann die Routing-Werke (so id = 1 Routen zur parametrisierte Methode?).
Ich möchte wissen, warum dies nicht funktioniert mit Attribut-based Routing obwohl. Ist das ein Fehler, oder mache ich es einfach falsch?
hier ist der MapHttpRoute Code, es funktioniert wird:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Danke Nkosi. Ich finde es wirklich seltsam, dass das Verhalten, das Sie mit HttpMapRoute() erhalten, sich so sehr von dem Verhalten unterscheidet, das Sie mit dem attributbasierten Routing bekommen. Ich frage mich, warum sie sie so anders funktionieren ließen. – JMarsch
Ich glaube, ich habe irgendwo gelesen, dass verschiedene Teams an den MVC- und Web-Api-Frameworks arbeiten. Sie können ähnliche Funktionalität teilen, aber unter der Haube wurde es anders entwickelt. Es wurde schließlich zu einer gemeinsamen Version in der vNext-Version verschmolzen, die schließlich asp-Punkt-Netzkern wurde. – Nkosi