目標:要注入IHttpContextAccessor
作爲依賴,autmapper輪廓的構造依賴注入到.NET的核心automapper資料 - IHttpContextAccessor返回null
爲什麼:我需要在當前用戶傳遞的的標識名稱爲建設我的域名之一的部分物品
問題 所獲得的用戶身份始終是空
到目前爲止我有什麼?
Startup.cs
mc.AddProfile(new DtoToOtherProfile(new HttpContextAccessor()));
//OR
var mapperConfiguration = new MapperConfiguration(mc =>
{
IServiceProvider provider = services.BuildServiceProvider();
mc.AddProfile(new DtoToOtherProfile(provider.GetService<IHttpContextAccessor>()));
});
DtoToOtherProfile.cs
public DtoToOtherProfile(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
CreateMap<MyDto, MyOther>()
.ConstructUsing(myDto => new myOther(myDto.prop1, myDto .prop2, _httpContextAccessor.HttpContext.User.Identity.Name)); // the name is what i intend to pass
// other mapping
}
Controller.cs
public async Task<IActionResult> Create([FromBody]MyDto model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
// save campaign
var myOtherModel = _mapper.Map<MyOther>(model);
// myOtherModel.UserName is always null
// rest
}
是有什麼缺失?請指點?
謝謝。我也試過這個,但真正的問題是User.Identity.Name從訪問中獲取 - 或者始終爲空 - 僅在調用控制器方法時才實例化,而不是在映射器配置文件級別實例化。所以想知道如果我做錯了或是預期的。 – Jaya
@Jaya你有沒有找到任何解決方案。我掙扎了2天 –
@GeorgePapadakis有一個基本問題,您依賴於來自單例作用域服務(AutoMapper映射器*應該是*,不要求它的請求範圍)的請求範圍內的事情。您很可能無法將請求用戶的用戶名映射到那裏。 – juunas