Web Api2の正しいパッケージをインストールしました
Install-Package Microsoft.AspNet.WebApi.HelpPage -Pre
しかし、ヘルプ領域はマップされておらず、404を返しています(Web Apiは正常に機能しています)。ホストとしてMicrosoft.Owin.Host.SystemWebを使用しています。以下は私のスタートアップコードです。
public class Startup
{
public void Configuration(IAppBuilder app)
{
//Required for MVC areas new HttpConfiguration() doesn't work with MVC
var config = GlobalConfiguration.Configuration;
AreaRegistration.RegisterAllAreas();
WepApiStartup.Configure(config);
app.UseWebApi(config);
}
}
たくさんの掘り下げ/試行錯誤の末に解決策を見つけました。この問題はここで詳しく説明されています: http://aspnetwebstack.codeplex.com/discussions/453068
UseWebApiとUseHttpMessageHandlerは、404以外のNext OWINのミドルウェアを呼び出しません。つまり、UseWebApiを使用する場合、Nextは呼び出されないため、他のミドルウェア(NancyやWeb Apiのヘルプページなど)では使用できません。
@aliostadパッチに感謝します: https://github.com/aliostad/CacheCow/blob/master/samples/UsingCacheCowWithNancyAndOwin/HttpMessageHandlerAdapterModified.cs#L4
期待どおりに動作させることができます。 UseWebApiがOwinの設計目標IMOを破ったため、チームがこれに対するプルリクエストをマージすることを願っています。
2014年2月13日更新
これを回避するために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);
}
2015年7月1日更新
MVCの代わりにWebApiを使用してヘルプページをホストすることもできます。これはセルフホストに最適です http://blogs.msdn.com/b/yaohuang1/archive/2012/12/20/making-asp-net -web-api-help-page-work-on-self-hosted-services.aspx
2015年9月10日更新
Web Apiの場合、@ hongye-Sunの回答を試しましたが、それも機能します。HelpPageAreaRegistration.RegisterAreaとHelpControllerのコンストラクターを変更して、@ gspatelの指示に従ってください。私の回避策も同様に機能するので、状況に最も適したものを選択してください。
ただし、UseWebApiを他のミドルウェアで使用し、Next()を呼び出さない場合でも問題が発生します(IISセルフホストではない)を使用した場合にのみ発生するようです)。パスをマッピングし、次に呼び出されるように強制することは、すべてのOwinミドルウェアNancy、Simple.Webなどの有効な回避策です。
2016年1月13日更新
私はOwinミドルウェアを開発して、この問題を完全に解決する、私たちが知っていて大好きなASP.NET WebAPIヘルプページを生成しました。 私のブログ投稿では、この問題の背景について詳しく説明しています
GlobalConfiguration.Configurationは、Webホスト固有のHttpConfiguraitonであり、Webホストシナリオでのみ使用する必要があります。 OWINホストで使用すると、予期しない問題が発生します。
代わりに次のコードを使用してください。
public class Startup
{
public static HttpConfiguration HttpConfiguration { get; private set; }
public void Configuration(IAppBuilder app)
{
HttpConfiguration = new HttpConfiguration();
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(HttpConfiguration);
app.UseWebApi(HttpConfiguration);
}
}
プロジェクト内のすべてのGlobalConfiguration.ConfigurationをStartup.HttpConfigurationに置き換え、ヘルプページファイルを含めます。