ApiController の単体テストでは、コントローラーをインスタンス化するためにいくつかのヘルパー メソッドを使用します。
public static ResourcesController SetupResourcesController(HttpRequestMessage request, IResourceMetadataRepository repo, IUnitOfWorkService unitOfWorkService)
{
var config = new HttpConfiguration();
var defaultRoute = config.Routes.MapHttpRoute(RouteNames.DefaultApi , "api/{controller}/{id}");
var routeData = new HttpRouteData(defaultRoute, new HttpRouteValueDictionary { { "controller", "resources" } });
var resourcesController = new ResourcesController(repo, unitOfWorkService)
{
ControllerContext = new HttpControllerContext(config, routeData, request),
Request = request
};
resourcesController.Request.Properties.Add(HttpPropertyKeys.HttpRouteDataKey, routeData);
resourcesController.Request.Properties[HttpPropertyKeys.HttpConfigurationKey] = config;
// Compilation fail: The Property 'System.Web.Http.ApiController.User' has no setter.
resourcesController.User = myStubUserPrincipal;
return resourcesController;
}
私の質問は、コントローラーの User プロパティをどのように設定するかということです。
私はもう試した:
request.Properties.Add("MS_UserPrincipal", myStubUserPrincipal);
しかし、これも機能しません (resourcesController.User プロパティは null のままです)。
ベストアンサー1
を設定すると、コントローラー内のプロパティThread.CurrentPrincipal
が自動的に初期化されます。User
この回答を見たけれど、設定方法が分からない人のためにCurrentPrincipal
:このコードMSDN から抜粋したものです。
Thread.CurrentPrincipal = new GenericPrincipal
(
new GenericIdentity("Bob", "Passport"),
new[] {"managers", "executives"}
);