2016-05-25 1 views
0

Если в моем настраиваемом JsonConverter выбрано исключение, я хочу остановить запрос и вернуть ошибку клиенту. Проблема в том, что если исключение происходит в конвертере, метод контроллера получает параметр как null, и я теряю исключение. Как я могу остановить запрос от доступа к контроллеру или получить исключение из JsonConverter в контроллере? Или любая другая идея ..Owin self hosting исключение дескриптора веб-api в JsonConverter

Мой конвертер похож на этот пост: How to implement custom JsonConverter in JSON.NET to deserialize a List of base class objects?

public class MyJsonConverter : JsonConverter 
{ 
protected override Person Create(Type objectType, JObject jObject) 
    { 
     Throw new Exception(); 
    } 
} 

Мой контроллер:

Public class MyController : ApiController 
{ 
    Public IHttpResuls Post(Person p) 
    { 
     ... 
    } 
} 

ответ

0

У меня есть решение. Поскольку HttpContext.Current имеет значение null в OWIN web api. Вы можете использовать этот пакет - OwinRequestScopeContext, который позволяет использовать контекст, который также относится к запросу.

, например, установить ошибку в JsonConverter:

OwinRequestScopeContext.Current.Items["error"] = exception; 

А затем получить ошибку в контроллере:

var ex = OwinRequestScopeContext.Current.Items["error"] as Exception;