2012-05-31 30 views
7

Estoy usando la nueva API de asp.net y me gustaría pasar parámetros opcionales, creo que debes completar un atributo para que me permita pasar los parámetros usando? Símbolo.asp.net webapi: cómo pasar parámetros opcionales?

Antes de esto se hizo con plantillas de uri, creo.

¿Alguien tiene un ejemplo o alguna ayuda realmente apreciada?

Actualmente estoy pasando el id en la url que llega en mi controlador como int yo había

Pero tengo que pasar algunas fechas

+0

¿Podría aclarar un poco más cuál es su situación? ¿Qué firma de método de acción esperas? ¿Qué cambios de ruteo has hecho? Parte de la información sobre los conceptos básicos de enrutamiento de la API Web está disponible aquí: http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api – marcind

Respuesta

6

Puede hacer un parámetro opcional mediante el uso de un tipo anulable:

public class OptionalParamsController : ApiController 
{ 
    // GET /api/optionalparams?id=5&optionalDateTime=2012-05-31 
    public string Get(int id, DateTime? optionalDateTime) 
    { 
     return optionalDateTime.HasValue ? optionalDateTime.Value.ToLongDateString() : "No dateTime provided"; 
    } 
} 
+0

Gracias Ian, Funcionó muy bien. – Martin

3

Además de la respuesta anterior proporcionado por Ian, que es correcto, también puede proporcionar valores predeterminados que siento es una opción más limpia que evita tener que comprobar si algo fue aprobada o no. Solo otra opción.

public class OptionalParamsController : ApiController 
{ 
    // GET /api/optionalparams?id=5&optionalDateTime=2012-05-31 
    public string Get(int id, DateTime optionalDateTime = DateTime.UtcNow.Date) 
    {...} 
} 
+3

Los parámetros opcionales deben ser constantes en tiempo de compilación, DateTime NUNCA es una constante de tiempo de compilación. – frapontillo

+0

Vaya, sí, está en lo cierto. No se puede proporcionar un datetime como parámetro opcional y no debería haberlo usado como ejemplo. Sin embargo, otros tipos de datos se pueden usar de esta manera. – AlexGad

+0

En mi proyecto actual, si no proporciono un valor predeterminado, la ruta no se resuelve, devolviendo un error HTTP 404 (No encontrado). La firma del método debe ser 'void MyAction (long id, long? Value1 = -1, long? Value2 = -1)' ... Si no proporciono los valores predeterminados, ¡falla si no se pasa la cadena de consulta! – Loudenvier

Cuestiones relacionadas