_Microsoft.Owin.Testing.TestServer
_を使用したより良いテストジョブのために、Global.asaxがOwin TestServerでロードされていないことがわかりました。
そこで、以下のようにGlobal.asaxの構成をStartup.csに移動しようとします。
_public partial class Startup
{
public void Configuration(IAppBuilder app)
{
// pasted Global.asax things start.
GlobalConfiguration.Configuration.Formatters.Clear();
var jsonSerializerSettings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
};
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter() { SerializerSettings = jsonSerializerSettings });
GlobalConfiguration.Configuration.Formatters.Add(new FormMultipartEncodedMediaTypeFormatter());
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// pasted Global.asax things end.
ConfigureAuth(app);
}
}
_
ただし、TestServer
failedは、_AreaRegistration.RegisterAllAreas
_、FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters)
などの構成のすべてのポイントで初期化するため...
私にとって最小の実行可能な移行(TestServerでのテストの成功)は以下のとおりです。
_public partial class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
config.Formatters.Clear();
var jsonSerializerSettings = new JsonSerializerSettings
{
PreserveReferencesHandling = PreserveReferencesHandling.Objects,
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
};
config.Formatters.Add(new JsonMediaTypeFormatter() { SerializerSettings = jsonSerializerSettings });
config.Formatters.Add(new FormMultipartEncodedMediaTypeFormatter());
WebApiConfig.Register(config); // moved from GlobalConfiguration.Configure(WebApiConfig.Register)
app.UseWebApi(config);
ConfigureAuth(app);
}
}
_
とにかくすべての構成をStartup.csに移動する方法はありますか?
既にお気づきのとおり、Startup.Configuration()
によって消費されるOwinContext
は、MvcApplication.Application_Start()
によって消費される従来のASP.NET HttpContext
とは異なります。両方とも異なるコンテキストパイプラインを使用しています。より具体的には、ASP.NET MVCは依然として_System.Web.dll
_に依存していますが、ASP.NET Web APIは依存していません。
したがって、コードに基づいて、通常MvcApplication.Application_Start()
に配置された一部のメソッドはStartup.Configuration()
内で実行できません。
AreaRegistration.RegisterAllAreas();
:このメソッドは_System.Web.dll
_に依存しています。RouteConfig.RegisterRoutes(RouteTable.Routes);
:RouteCollection
は_System.Web.dll
_の一部です。GlobalConfiguration.Configure(WebApiConfig.Register)
:繰り返しますが、WebApiConfig.Register()
内のRouteCollection
は_System.Web.dll
_の一部です。OWINコンテキスト内のURLルーティングには、AttributeRouting
が推奨されます。したがって、これの代わりに、config.MapHttpAttributeRoutes();
を試してください。これにより、多くの自由が得られます。
それでもAreaRegistration.RegisterAllAreas();
をOWINコンテキストStartup.Configuration()
内で実行したい場合は、 Katanaライブラリ をインポートすることをお勧めします。これにより、OWINと_System.Web.dll
_が統合されるため、おそらく目標を達成できます。
HTH