Pregunta

Quiero tener puntos finales de servicio de servicio como los siguientes ...

[RestService("/items/recent")]
[RestService("/items/recent/{Page}")]
[RestService("/items/popular")]
[RestService("/items/popular/{Page}")]

Dado que ambos devolverían un List<Item>, Me encantaría poder tener ambos en el mismo RestServiceBase Para una gestión de código más fácil. es posible? Si es así, ¿cómo puedo diferenciar la solicitud cuando se trata de encontrar si fue una solicitud "reciente" o "popular" para que pueda manejarla adecuadamente?

¿Fue útil?

Solución

Sí, puede tener múltiples rutas de descanso que apuntan al mismo servicio web.

Si desea salir de las rutas como es, puede inspeccionar la ruta de solicitud utilizada para invocar el servicio a través de HTTPRequest, es decir:

var httpReq = base.RequestContext.Get<IHttpRequest>();
httpReq.PathInfo //or httpReq.RawUrl, httpReq.AbsoluteUri, etc.

La forma en que resuelve qué tipo de solicitud es, al observar la solicitud poblada DTO, pero para distinguir entre /reciente/ y /popular/ Debe almacenarlo en otra solicitud de propiedad DTO y luego inspeccionar sus valores, es decir,

[RestService("/items/{Type}")]
[RestService("/items/{Type}/{Page}")]
public class Items
{
    public string Type { get; set; }
    public int? Page { get; set; }
}

public class ItemsService : ServiceBase<Items>
{
    public override object Run(Items request)
    {
        if (request.Type == "recent")
           if (!request.Page.HasValue) 
              //path 1
           else
              //path 2
        else if (request.Type == "popular")
           if (!request.Page.HasValue) 
              //path 3
           else
              //path 4
    }
}

Esto también es similar a esta pregunta de stackoverflow:Necesita ayuda en la implementación de ServiceStack

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top