2012-04-26 10 views
11

:Äquivalent von [Bind (Prefix = "PrincipalId")] in MVC4 Web API? Hintergrund

In MVC3, ich habe die folgende Syntax angeben, benutzerdefinierte Action Parameternamen verwendet:

public ActionResult ActionName([Bind(Prefix = "principalID")] int userID, 
           [Bind(Prefix = "dependentID")] long applicationID) 

Die Route für diese Aktion wurde wie folgt definiert (ActionNameConstraint ist ein Brauch IRouteConstraint) :

routes.MapHttpRoute(
    "DependantAction", 
    "{controller}/{principalID}/{action}/{dependentID}", 
    new {controller = @"[^0-9]+", action = ActionNameConstraint.Instance, dependentID = RouteParameter.Optional} 
    ); 

Frage:

Die BindAttribute ist eine System.Web.Mvc Klasse. Gibt es ein Äquivalent dazu (Parameterbindung) in Web Api?

Natürlich, wenn es andere Lösungen gibt, um das gleiche Ergebnis zu erzielen, würde ich sie gerne hören!

Antwort

-2

Ich verstehe, dass Sie in WebAPI verwenden Sie nur spezielle Controller-Klasse Basis und spezielle Aktion Namen, aber immer noch sind sie Controller und Aktionen.

Haben Sie es versucht und es hat nicht funktioniert? Ein kurzer Blick auf diesem Artikel scheint Modell allgemein verbindlich vorzuschlagen (nicht das spezifische Attribut obwohl) sollte in der Regel arbeiten:

http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

Edit:

Einige sagen, dies sollte mit MVC arbeitet nur und downvoted die Antwort. Hier, mehr Referenzen:

+0

Ich habe diesen Artikel tatsächlich überprüft, es trifft nicht wirklich die gleiche Absicht - der Artikel deckt hauptsächlich Modellbindung ab (die meisten meiner Suchen haben tatsächlich zu Ergebnissen über Modellbindung geführt) – diaho

+1

ASP.NET Web API nicht habe eine "BindAttribute" -Funktionalität eingebaut. Die Aktionsparameterbindung ist meine Modellbindungs- und Formatierungsfunktion der Web-API. Es handelt sich also nicht nur um Modellbinder. Ein weiterer Tipp hier ist: Verwenden Sie nichts unter 'System.Web.Mvc' Namespace mit ASP.NET Web API.In 99% der Fälle werden Sie in Schwierigkeiten geraten, wenn Sie dies tun. – tugberk

+0

Überprüfen Sie die aktualisierte Antwort. – Meligy

5

Sie können das System.Web.Http.FromUriAttribute Attribut der Parameternamen für Modell Bindung verwendet angeben.

public ActionResult ActionName(
        [FromUri(Name = "principalID.userID")] int userID, 
        [FromUri(Name= "dependentID.applicationID")] long applicationID 
        ) 

FromUri sagt Modell Bindung der Abfragezeichenfolge und die RouteData für den Antrag zu prüfen.

+1

Leider funktioniert diese Methode nur für Einschlüsse. Wenn Sie Ausschlüsse angeben möchten, sind Sie allein. –