2015-08-05 3 views
0

Внутри метода журнала нет контекста.Response = MyResponse;Как вернуть пользовательский ответ внутри ExceptionLogger

Как вернуть пользовательский ответ, как:

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

То действие вызывает исключение:

public async Task<IHttpActionResult> GetConfiguredProducts(int number) 
    { 
     var products = await service.Get(number); 
     return Ok(products); 
    } 


public class GlobalExceptionLogger : ExceptionLogger 
    { 
     private static int id; 

     public override void Log(ExceptionLoggerContext context) 
     { 
      Interlocked.Increment(ref id); 
      loggingService.ErrorException(string.Format("id: {0}", id), context.Exception); 

     } 
    } 
+0

Можете ли вы показать пример, как вы это называете? – Krzysztof

+0

Я написал метод полного действия, выше которого вызывается в качестве примера. – Elisabeth

+0

Я не уверен, что понимаю вопрос. Там * нет ответа * на журнал - исключения ExceptionLogger регистрируются * необработанные * исключения. Это означает, что ваш код разбился, прежде чем он смог создать и отправить ответ. Запрос, хотя и доступен через [ExceptionLoggerContext.Request] (https://msdn.microsoft.com/en-us/library/system.web.http.exceptionhandling.exceptionloggercontext.request (v = vs.118) .aspx # P: System.Web.Http.ExceptionHandling.ExceptionLoggerContext.Request). –

ответ

0

Если вы используете стек на основе System.Web (это, вероятно, в случае, если вы используете IIS и ASP.NET версии < 5), вы может получить ссылку на запрос и ответ в любом месте, используя

HttpContext.Current 

объект.

0

ExceptionLoggerContext предоставляет ExceptionContext, который предоставляет Request and RequestContext. Достаточно ли этого?

+0

Я их видел ... но как вы берете возвращаемое значение из вызываемого действия, добавляете id к свойству из возвращаемого значения и затем передаете весь этот объект клиенту? – Elisabeth

+0

Если вы обрабатываете исключение, значит, что-то случилось неправильно, и вы должны предпринять какое-то действие. Какой смысл добавлять какие-либо запросы? Запрос - это то, что происходит от браузера, и обработка этого исключения запроса была брошена, тогда вы должны предпринять действие - очистить то, что произошло неправильно, и перенаправить на другую страницу - например, извините страницу. – Krzysztof

+1

// Когда возникает исключение, конечно, ответа нет, поэтому я не могу добавить никаких данных в объект ответа. Я добавил его в заголовок ответа. HttpContext.Current.Response.AddHeader ("LoggingId", id.ToString()); – Elisabeth

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