Ответ 1
Нашел решение после многократного поиска/проб и ошибок. Проблема хорошо описана здесь: http://aspnetwebstack.codeplex.com/discussions/453068
UseWebApi и UseHttpMessageHandler не вызывают следующее промежуточное ПО OWIN, отличное от 404. Это означает, что если вы используете UseWebApi, то он никогда не вызывается, поэтому вы не можете использовать его с каким-либо другим промежуточным программным обеспечением (страницы поддержки Nancy или Web Api для пример).
Благодаря патчу @aliostad: https://github.com/aliostad/CacheCow/blob/master/samples/UsingCacheCowWithNancyAndOwin/HttpMessageHandlerAdapterModified.cs#L43
Вы можете заставить его работать как ожидалось. Я надеюсь, что команда объединит запрос на растяжение для этого, поскольку UseWebApi нарушает цели дизайна Owin IMO.
Обновление 13 февраля 2014 г.
Я написал расширение Owin, чтобы обойти это:
internal static void UseWebApiAndHelp(this IAppBuilder app, HttpConfiguration config)
{
WepApiStartup.Configure(config);
app.UseHandlerAsync((request, response, next) =>
{
if (request.Path == "/") //app.Map using a regex exclude list would be better here so it doesn't fire for every request
{
response.StatusCode = 301;
response.SetHeader("Location", "/Help");
return Task.FromResult(0);
}
return next();
});
// Map the help path and force next to be invoked
app.Map("/help", appbuilder => appbuilder.UseHandlerAsync((request, response, next) => next()));
app.UseWebApi(config);
}
Обновление 01 июля 2015
Вы также можете размещать страницы справки, используя WebApi вместо MVC, что отлично подходит для самостоятельного хоста http://blogs.msdn.com/b/yaohuang1/archive/2012/12/20/making-asp-net-web-api-help-page-work-on-self-hosted-services.aspx
Обновление 10 сентября 2015 г.
Для Web Api я попробовал @hongye-sun ответ, и он тоже работает, следуйте тому, что говорит @gspatel, изменяя HelpPageAreaRegistration.RegisterArea и конструктор HelpController. Мое обходное решение работает так, чтобы выбрать то, что лучше всего подходит для вашей ситуации.
Однако я все еще сталкиваюсь с проблемой использования UseWebApi с другим промежуточным программным обеспечением, и он не вызывает Next() (похоже, это происходит только при использовании IIS, а не для самого хоста). Я нашел, что обходной путь для сопоставления пути и принудительного запуска рядом с ним является допустимым обходным решением для всех промежуточных программ Owin Nancy, Simple.Web и т.д.
Обновление 13 января 2016 г.
Я разработал промежуточное ПО Owin для создания страниц справки ASP.NET Web API, которые мы знаем и любим, что полностью решает эту проблему. В моем блоге подробно рассказывается об этой проблеме