¿Servicios de servicio de servicio separados o combinados?
-
29-10-2019 - |
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?
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