2012-04-26 19 views
11

Antecedentes:Equivalente a [Bind (Prefix = "principalId")] en MVC4 Web Api?

En MVC3, he utilizado la siguiente sintaxis para especificar nombres de los parámetros personalizados Action:

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

La ruta de esta acción se define como sigue (ActionNameConstraint es una costumbre IRouteConstraint) :

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

pregunta:

La BindAttribute es una clase System.Web.Mvc. ¿Hay un equivalente de esto (enlace de parámetros) en Web Api?

Por supuesto, si hay otras soluciones para lograr el mismo resultado, ¡me encantaría escucharlas!

Respuesta

-2

Entiendo que en WebAPI solo utiliza una base especial de clase de controlador y nombres de acción especiales, pero aún así, después de todo, son controladores y acciones.

¿Lo intentó y no funcionó? Un rápido vistazo a este artículo parece sugerir la unión en general (no el atributo específico, aunque) modelo debería funcionar con normalidad:

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

Editar:

Algunos dicen que esto debería funcionar con MVC solamente y downvoted la respuesta. Aquí tienes, más referencias:

+0

Revisé ese artículo en realidad, realmente no tiene el mismo propósito: el artículo cubre principalmente el enlace de modelo (la mayoría de mis búsquedas han dado lugar a resultados sobre el enlace de modelo en realidad) – diaho

+1

ASP.NET Web API no lo hace tener incorporada una funcionalidad 'BindAttribute'. El enlace del parámetro de acción se realiza con mi modelo de enlace y la función de formato de Web API. Por lo tanto, no son solo carpetas modelo. Otro consejo aquí es que: no use nada en el espacio de nombres 'System.Web.Mvc' con ASP.NET Web API.99% del tiempo, estarás en problemas si haces esto. – tugberk

+0

Ver respuesta actualizada. – Meligy

5

Usted puede utilizar el atributo System.Web.Http.FromUriAttribute para especificar los nombres de los parámetros utilizados para la unión modelo.

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

FromUri dice modelo de unión para examinar la cadena de consulta y el RouteData para la solicitud.

+1

Desafortunadamente, este método solo funciona para inclusiones. Si desea especificar exclusiones, está solo. –

Cuestiones relacionadas