В моем коде WebApi я создаю исключение HttpResponseException, которое замыкает конвейер запроса и генерирует действительный ответ Http. Тем не менее, я пытаюсь интегрировать webApi с протоколом elmah, но HttpResponseExeptions не отображаются.Elmah не регистрирует исключения с использованием WebAPI с HttpResponseException
У меня есть web.config установка для Elmah и имеют следующий код:
В Global.asx.cs:
static void ConfigureWebApi(HttpConfiguration config)
{
config.Filters.Add(new ServiceLayerExceptionFilter());
config.Filters.Add(new ElmahHandledErrorLoggerFilter());
config.DependencyResolver = new WebApiDependencyResolver(ObjectFactory.Container);
}
Фильтр:
public class ElmahHandledErrorLoggerFilter : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext actionExecutedContext)
{
base.OnException(actionExecutedContext);
ErrorSignal.FromCurrentContext().Raise(actionExecutedContext.Exception);
}
}
Код, в котором исключено исключение:
public Task<FileUpModel> UploadFile()
{
if (Request.Content.IsMimeMultipartContent())
{
var provider = new TolMobileFormDataStreamProvider("C:\images\");
var task = Request.Content.ReadAsMultipartAsync(provider).ContinueWith(
t =>
{
if (t.IsFaulted || t.IsCanceled)
throw new HttpResponseException(HttpStatusCode.InternalServerError);
var fileInfo = provider.FileData.FirstOrDefault();
if (fileInfo == null)
// the exception here isn't logged by Elmah?!
throw new HttpResponseException(HttpStatusCode.InternalServerError);
var uploadModel = new FileUpModel { success = true };
return uploadModel;
});
return task;
}
else
{
throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotAcceptable, "This request is not properly formatted"));
}
}
Может ли кто-нибудь, кто это сделал раньше, сообщите мне, что я делаю неправильно?
Так как я могу заставить его работать? – jaffa
Вы не можете. Ваш фильтр будет вызываться только для исключений, отличных от HttpResponseExceptions, когда они выкидываются из действий. –
Я использовал ручную сигнализацию ошибок Elmah, когда создаю исключение HttpResponseException, и это, похоже, работает нормально. – jaffa