2016-06-04 11 views
2

Ich wollte das Attribut-Routing verwenden. Mein Code ist:Der Inline-Constraint-Resolver vom Typ 'DefaultInlineConstraintResolver' konnte die folgende Inline-Constraint nicht auflösen:

[Route("api/ws/{parm: myClass}")] 
public void Post(myClass parm) 
{ ... } 

Dies in einer Ausnahme in WebApiConfig.Register führte wie folgt:

Die Inline-Constraint-Resolver des Typs 'DefaultInlineConstraintResolver' konnte die folgende Inline-Einschränkung beheben: 'myClass'.

Was könnte die Ursache für diesen Fehler sein?

myClass ist ein komplexes Objekt, dh kein einfacher Werttyp, sondern eine Klasse mit mehreren Eigenschaften. Sind solche Parameter erlaubt?

+1

Da Sie ein komplexes Objekt nicht über eine URL übergeben können (was die einzige Verantwortung für das Routing ist), ist unklar, was Sie damit erreichen möchten. Komplexe Objekte * können * über HTTP POST gepostet werden und * können * als Parameter von Aktionsmethoden enden, aber die URL hat damit nichts zu tun (abgesehen davon, dass sie die richtige Aktionsmethode zum Posten ausgewählt hat). – NightOwl888

+0

Zeigen Sie ein Beispiel dafür, wie 'myClass' aussehen würde und wie Sie die Eigenschaften in Bezug auf den Parameter route verwenden möchten. Abhängig von der Komplexität der Klasse können Sie eine [Custom Route Constraint] (http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web) erstellen -api-2 # Einschränkungen) – Nkosi

+0

Die Daten werden im Post-Body übergeben. Ich habe irrtümlich gedacht, dass die Überladung der Parameter verwendet werden könnte, um die verschiedenen empfangenen Datentypen abzugleichen. Ich habe nicht ganz verstanden, ob Routen auch für Daten im Post-Body gelten würden. –

Antwort

4

Nein, Sie können keine Objekte in Routing-Attributen verwenden. this article verfügt über eine Tabelle mit einer vollständigen Liste der zulässigen Attributtypen.