Разрешение службы ServiceStack и определение типа контента

1

В настоящее время я разрабатываю API С# ServiceStack.

В одной из служб мне нужно выполнить другую услугу. Я разрешаю службу из контейнера Funq и выполняю соответствующий метод, но возвращаю json вместо объектов.net.

Я понимаю, что это потому, что исходный запрос от внешнего интерфейса был для типа содержимого json, а тип содержимого по умолчанию - json.

Есть ли способ разрешить службу и выполнить ее методы, но вместо этого получить объекты.net?

Теги:
servicestack
content-type

1 ответ

3
Лучший ответ

Вы можете выполнить и делегировать другую службу в ServiceStack с помощью ResolveService<T>, например:

Изнутри службы ServiceStack:

using (var service = base.ResolveService<MyService>())
{
    var response = service.Get(new MyRequest { ... });
}

Из пользовательского пользовательского сеанса:

using (var service = authService.ResolveService<MyService>())
{
    var response = service.Get(new MyRequest { ... });
}

С внешней стороны ServiceStack:

using (var service = HostContext.ResolveService<MyService>())
{
    var response = service.Get(new MyRequest { ... });
}

Службы ServiceStack - это просто нормальные зависимости

Поскольку службы в ServiceStack аналогичны любой другой зависимости от IOC, реализация ResolveService просто решает службу из ServiceStack IOC и вводит текущий запрос, то есть:

public static T ResolveService<T>(HttpContextBase httpCtx=null) 
    where T : class, IRequiresRequest
{
    var service = AssertAppHost().Container.Resolve<T>();
    if (service == null) return null;
    service.Request = httpCtx != null 
        ? httpCtx.ToRequest() 
        : HttpContext.Current.ToRequest();
    return service;
}
  • 0
    Спасибо за быстрый ответ. Да, работает удовольствие. Я не уверен, почему мне возвращали сырой контент в формате json. Возможно, я не использовал ResolveService <MyService>.
  • 2
    @Drammy Я предполагаю, что вы вызывали службу через HTTP, например, используя JsonServiceClient.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню