2013-10-10 2 views
1

В моем предыдущем проекте я использую структуру (Agatha RRSL), похожую на ServiceStack, так как все сделано из Request, Response и Handler. Он также имеет перехватчики, которые могут подключаться к обработчику, и вы также можете вводить другие интерфейсы в обработчик. Я могу использовать это, чтобы открыть транзакцию BeforeHandling, получить доступ к запросам и ответам в AfterHandling, создать аудит, сохранить базу данных и закрыть транзакцию, если это необходимо.Доступ к запросу, ответу, сервису и Db-контексту и т. Д. В ServiceStack

Я пытаюсь поэкспериментировать с SerivceStack. Но, кажется, с фильтрами, я не могу захватить запрос и ответ вместе?

С пользовательским ServiceRunner. Когда я пытаюсь отлаживать OnAfterExecute (...), я могу увидеть имя моего запроса dto в IRequestContext {ServiceStack.ServiceHost.HttpRequestContext}. Но только имя, я не мог понять, как получить фактический объект запроса для работы с объектом ответа.

Еще одна вещь, которую я не понял, - это возможность вставить в нее интерфейс автоматической проводной службы, например, контекст db или службу аудита. Может быть, это слишком далеко впереди?

Последняя вещь, кажется, я могу зарегистрировать только один пользовательский сервисный бегун? С Interceptor я могу сбросить кучу, и они обернутся друг к другу.

Любые мысли? Благодаря

ответ

3

RequestContext также содержит HttpRequest и HttpResponse, которые вы можете получить доступ с помощью:

var httpReq = RequestContext.Get<IHttpRequest>(); 
var httpRes = RequestContext.Get<IHttpResponse>(); 

Смотрите документацию на Accessing HTTP Specific features для получения дополнительной информации.

+0

Спасибо. Это похоже на HttpRequest. Как получить исходный запрос Dto? В идеале от ResponseFilter, а не от обслуживающего бегуна. Я смотрел почти все в отладчике, все еще не мог понять. – Whoever

+0

@ Все фильтры Response действуют на ответы, поэтому им предоставляется ответ DTO. Если вам нужно передать метаданные по конвейеру запроса, рекомендуется вместо этого использовать 'Request.Items'. Хотя запрос DTO доступен с RequestContext.Dto. – mythz

+0

Все еще не выяснили, как получить доступ к RequestContext.Dto, любые подсказки? Я пытаюсь получить доступ к настраиваемым атрибутам аудита по запросу dto в сочетании с результатом в ответе dto и создать объект аудита. Например, пользовательский логин xyz, успех/неудача и т. Д. Итак, мне нужен исходный запрос Dto в более поздней половине конвейера, либо в OnAfterExecute, либо ResponseFilterAttribute. – Whoever

Смежные вопросы