Me pareció útil esta respuesta, pero no sé exactamente cómo ayuda el ejemplo proporcionado. Parece que simplemente "cambia el nombre" de un valor que el archivador ya ha proporcionado.
En mi caso, me estaba enviando un servicio externo que publicaba algo así como "body-plain" y no podía controlar el nombre. Así que he modificado esta muestra para tener este aspecto:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = true)]
public class ParameterNameMapAttribute : ActionFilterAttribute
{
public string InboundParameterName { get; set; }
public string ActionParameterName { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
object value = filterContext.RequestContext.HttpContext.Request[InboundParameterName];
if (filterContext.ActionParameters.ContainsKey(ActionParameterName))
{
filterContext.ActionParameters[ActionParameterName] = value;
}
else
{
throw new Exception("Parameter not found on controller: " + ActionParameterName);
}
}
}
Esto toma realmente en el parámetro "cuerpo simple" por ejemplo, y lo asigna a una ActionParameter he definido en mi controlador. De este modo:
[ParameterNameMap(InboundParameterName = "body-plain", ActionParameterName = "bodyPlainText")]
[ParameterNameMap(InboundParameterName = "Thread-Topic", ActionParameterName = "alternateSubject")]
public HttpStatusCodeResult Process(string token, string timestamp, string signature, string subject, string sender, string recipient, string bodyPlainText, string alternateSubject)
{
¿Realmente necesita utilizar el tablero? –
¿es ** obligatorio ** ser 'user-name'? – Buildstarted
No se requiere en absoluto. Es desconcertante que MVC no haya pensado en este escenario. Realmente no lo uso, solo curiosidad si está allí ... o por qué no está allí. –