Задача
У меня есть класс DataMapper, который я использую для отображения данных в пользовательские представления для мобильного клиента моего веб-API.
public class DataMapper
{
public static string Role { get; set; }
public static RoleReturnModel Create(IdentityRole appRole)
{
return new RoleReturnModel
{
Id = appRole.Id,
Name = appRole.Name
};
}
public static CountryReturnModel Create(Country country)
{
return new CountryReturnModel
{
Id = country.Id,
Name = country.Name,
CityList = country.Cities.Select(city => DataMapper.Create(city))
};
}
public static CityReturnModel Create(City city)
{
return new CityReturnModel
{
Id = city.Id,
Name = city.Name,
};
}
}
Первое свойство, которое вы видитеназывается роль.Мне нужно заполнить это той ролью, которая связана с моим веб-методом.Это так, потому что иногда мне нужно условное отображение, чтобы возвращать клиенту представления данных, специфичные для ролей.
Проблема
Я думал, что лучшее место для этого - DataMapper.Role = CurrentRole:в конструкторе моего ApiController
public class BaseApiController : ApiController
{
private ModelFactory _modelFactory;
private ApplicationUserManager _AppUserManager = null;
private ApplicationRoleManager _AppRoleManager = null;
protected BaseApiController()
{
//Request is null here
DataMapper.Role = Request.GetOwinContext().GetUserManager<ApplicationRoleManager>().FindById(User.Identity.GetUserId()).Name;
}
Это, однако, не работает.Объект запроса является нулевым в конструкторе.Это только заполняется в моем реальном веб-методе
public class UsersController : BaseApiController
{
IUserRepository UserRepository;
public UsersController() // will use ninject for constructor injection
{
UserRepository = new UserRepository();
}
[Route("profile")]
public IHttpActionResult GetUser()
{
//Request is available here
}
Я новичок вебапи.Нужны указатели на эту проблему.