Сообщение об исключении HTTPError не отображается, когда webapi запущен на сервере, а не локально

У меня есть webapi, который работает на сервере IIS7.5. Он имеет 3 контроллера, и все 3 могут быть использованы для доступа к вебапи из звонков в моем приложении.

У меня была ошибка, когда мой базовый класс для моего контроллера выставлял его функции как публичные, а не защищенные. Это привело к тому, что сервер выдал внутреннюю ошибку 500 сервера (из-за недопустимого исключения «найдено несколько действий, соответствующих запросу»). Мне потребовалось некоторое время, чтобы углубиться в это, потому что это никогда не вызывало регистрацию в моем webapi. Из этого предположенияВотЯ обнаружил, что ошибка происходила до того, как функция Application_Error перехватит ее для регистрации. Поэтому я добавил приведенный ниже код в свой global.asax моего webapi и теперь могу регистрировать ошибки, подобные этой.

НО, моя проблема сейчас, когда я вызываю Внутреннюю ошибку сервера 500 точно так же, как описано выше, на моей локальной машине, на которой запущен мой webapi, я получаю журнал именно так, как я хочу его видеть, с помощью «ExceptionMessage» из «Было найдено несколько действий, которые соответствуют запрос "прописан как причина внутренней ошибки сервера. Но при развертывании этого точного кода на сервере и использовании веб-интерфейса оттуда мой журнал отображает только «Сообщение»: «Произошла ошибка» и не отображает «ExceptionMessage», хотя я вижу, что исключение быть брошенным с помощью PerfView. Мне просто нужно, чтобы журналы моего сервера отображали ту же информацию, что и мой локальный журнал.

public class ResponseExceptionTrapper : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request,
        CancellationToken cancellationToken)
    {
        return base
            .SendAsync(request, cancellationToken)
            .ContinueWith(response =>
            {
                var result = response.Result;
                if (!result.IsSuccessStatusCode)
                {
                    var exceptionResult = string.Format(
                         "Response exception: \r\n Path({0}) \r\n Status({1}) \r\n",
                         request.RequestUri,
                         result.StatusCode);

                    if (result.Content != null)
                    {
                        var exceptionReadTask =
                               result.Content.ReadAsStringAsync();

                        exceptionReadTask.Wait();
                        exceptionResult += "Message:" +
                                          exceptionReadTask.Result;

                    }

                    // Do something appropriate with exceptionResult
                    exceptionResult.Log();
                }

                return result;
            }, cancellationToken);
    }
}

Пример журнала сервера:

Timestamp: 4/24/2014 12:24:40 PM
Message: Timestamp: 4/24/2014 4:24:40 PM
Message: Response exception: 
Path(http://webserver/CreditReporting/Api/RetrieveQueuedPullCreditReport) 
Status(InternalServerError) 
Message:{"Message":"An error has occurred."}

Пример локального журнала:

Timestamp: 4/24/2014 12:03:16 PM
Message: Timestamp: 4/24/2014 4:03:16 PM
Message: Response exception: 
 Path(http://localhost:XXXXX/Api/RetrieveQueuedPullCreditReport) 
 Status(InternalServerError)
 Message:
  {"Message":"An error has occurred.",
  "ExceptionMessage":"Multiple actions were found that match the request:
    \r\nSystem.Threading.Tasks.Task`1[
 Our.WebServices.CreditReporting.Contracts.RetrieveQueuedPullCreditReportResponse] Post

Ответы на вопрос(2)

Ваш ответ на вопрос