Отдельные или комбинированные сервисы ServiceStack? - PullRequest
2 голосов
/ 07 декабря 2011

Я хочу иметь конечные точки ServiceStack, такие как следующие ...

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

Поскольку оба возвращали бы List<Item>, я хотел бы иметь возможность иметь оба этих параметра в одном и том же RestServiceBase для упрощения управления кодом. Это возможно? Если так, как я могу дифференцировать запрос, когда он поступает, чтобы выяснить, был ли это «недавний» или «популярный» запрос, чтобы я мог обработать его соответствующим образом?

1 Ответ

2 голосов
/ 07 декабря 2011

Да, у вас может быть несколько путей REST-указателей, указывающих на один и тот же веб-сервис.

Если вы хотите оставить пути как есть, вы можете проверить путь запроса, используемый для вызова службы, через HttpRequest, т.е.:

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

То, как вы определяете тип запроса, заключается в просмотре заполненного запроса DTO, но нужно различать / недавний / и / популярный / , который следует хранить это в другом свойстве Request DTO и затем проверяет его значения то есть

[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
    }
}

Это также похоже на вопрос StackOverflow: Нужна помощь по внедрению стека услуг

...