Katana / OWIN Отладка и приложение. Использование ErrorPage

У меня есть время заняться исследованиями и разработками, и с сегодняшнего дня я играю с OWIN.

Мне бы хотелось, чтобы служба OWIN WebAPI работала для всех взаимодействий с данными, а также отдельный веб-интерфейс SPA-проекта, использующий angular.

Весь код бессовестно украден из различных случайных постов в блоге, и это просто для того, чтобы овладеть этой "новой технологией".

Запускать

  public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
#if DEBUG
            app.UseErrorPage();
#endif

            app.UseWelcomePage("/");
            // Configure Web API for self-host. 
            HttpConfiguration config = new HttpConfiguration();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            app.UseWebApi(config);  

            app.Run(context =>
            {
                if (context.Request.Path.ToString() == "/fail")
                {
                    throw new Exception("Random exception");
                }

                context.Response.ContentType = "text/plain";
                return context.Response.WriteAsync("App Init");
            });
        }
    }

AccountsController

public class AccountsController : ApiController
{   
    // GET api/<controller>/5
    public string Get(int id)
    {
        throw new Exception("Random exception");
    }
}

Если я перехожу на [http://localhost:85/fail], я получаю очень сексуально выглядящую страницу ошибки.

Но когда я нажимаю [http: // l0calhost: 85 / api / accounts / 5], ошибка отображается как json/xml.

  1. Есть ли способ заставить исключения API-контроллера использовать механизм ошибок AppBuilder?
  2. Будет ли это осуждено? (Это выглядит немного грязно...)

1 ответ

Решение

В настоящее время (версия 5.0) Web API не имеет способа заставить исключения, происходящие внутри него, распространяться дальше по конвейеру. Как вы заметили, в настоящее время он преобразует исключения в ответные сообщения http, содержащие контент json/xml. Однако в следующем выпуске мы предоставим эту возможность как часть нашей глобальной функции обработки ошибок, где вы можете подключить свой механизм обработки ошибок.

IMO, видящий страницу ошибок для ошибок Web API, не очень полезен. Если вашим клиентом является Javascript, который выполняет эти вызовы, то как должен отображаться этот HTML? Также в настоящее время браузеры имеют хорошую поддержку отладки, где вы можете отслеживать вызовы и выяснять проблемы по ответам.

Другие вопросы по тегам