Abfrageparameter-Routeneinschränkungen

Ich habe gerade mit der Verwendung von ASP.NET Web API 2.1 begonnen und bin auf eine Einschränkung gestoßen. Mit dem Attribut-Routing kann ich Folgendes tun:

[Route("item/{id:int}")]
public IHttpActionResult GetItem(int id)
{
    ...
}

Die URL/item/5 Zu dieser Aktion wird aber die URL weitergeleitet/item/abc will nicht, wegen derint Zwang in{id:int}.

Ich habe versucht, meine URL so zu ändern, dass dieid Der Parameter befand sich zusammen mit seiner Einschränkung in der Abfragezeichenfolge, obwohl die Verwendung von Routenbeschränkungen für Abfrageparameter in der Dokumentation niemals erwähnt oder demonstriert wurde.

[Route("item?{id:int}")]
public IHttpActionResult GetItem(int id)
{
    ...
}

Wenn ich jetzt versuche zu laufen, bekomme ich eine Fehlermeldung auf demConfigure Methodenaufruf inApplication_Start.

protected void Application_Start()
{
    GlobalConfiguration.Configure(WebApiConfig.Register);
}

Die Nachricht lautet wie folgt.

ArgumentException wurde vom Benutzercode nicht behandelt

Die Routenvorlage darf nicht mit einem '/' oder '~' beginnen und kein '?' Charakter.

Zwei Dinge stören mich daran.

Zuerst,den Abschnitt Routenpräfixe dokumentieren auf MSDN macht klar, dass die Platzierung eines~ Zeichen am Anfang der Routenvorlage ist völlig akzeptabel. Ich habe es versucht und es funktioniert wie dokumentiert.

Wenn dies nicht der Fall ist, wie kann ich dann eine Routenbeschränkung für einen Abfrageparameter festlegen? Beachten Sie Folgendes, wobei die Routenbeschränkung entfernt wurde.

[Route("item")]
public IHttpActionResult GetItem(int id)
{
    ...
}

Die URL/item/5 wird zu dieser Aktion weitergeleitet, mitid einstellen5 - aber auch die URL/item/abcmitid einstellen0.

Gibt es keine Möglichkeit, eine Routenbeschränkung für einen Abfrageparameter festzulegen?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage