I am developing a net 5 api and am not able to do something so obvious, retrieve current user id. I have read all the possible articles and tried various approaches, but it is not working. I am aware that this question might seem banal to someone, but I am stuck. What confuses me is the fact that I can retrieve user mail without a problem, but with userid I get the aforementioned error in postman. Here is my code, I am supposed to retrieve transactions that have the same userid, I skipped some parts for brevity, thanks in advance to everyone willing to help:
public class StockTransaction : BaseEntity
{
public string UserId { get; set; } // this is users's id
public string Email { get; set; } // this is user's mail
}
Services:
private async Task<decimal> TotalNetProfit5(string userId)
{
decimal basket = 0;
foreach (var item in _context.Stocks.ToList())
{
var totalNetProfit = (_context.StockTransactions
.Where(t => t.UserId == userId && t.StockId == item.Id && t.Purchase == false)
.Sum(t => t.Price * t.Quantity)) -
(_context.StockTransactions
.Where(t => t.UserId == userId && t.StockId == item.Id && t.Purchase == true &&
t.Resolved > 0)
.Sum(t => t.Resolved * t.Price));
basket += totalNetProfit;
}
return await Task.FromResult(basket);
}
public async Task<TaxLiabilityVM> ReturnTaxLiability7(string userId)
{
decimal f = 100;
decimal? basket4 = await TotalNetProfit5(userId);
decimal? basket5 = (12 / f) * basket4;
decimal? basket6 = (18 / f) * basket5;
decimal? basket7 = basket5 + basket6;
decimal? basket8 = basket4 - basket7;
var taxLiability = new TaxLiabilityVM
{
GrossProfit = basket4,
CapitalGainsTax = basket5,
Surtax = basket6,
TotalTaxLiaility = basket7,
NetProfit = basket8
};
return await Task.FromResult(taxLiability);
}
Controller:
[HttpGet]
public async Task<ActionResult<TaxLiabilityVM>> CheckTotalProfit11()
var user = await _userManager.FindByEmailFromClaimsPrinciple(User);
var userId = user.Id;
var taxLiability = await _transactionService.ReturnTaxLiability7(userId);
return Ok(taxLiability);
}
Of course, I have also tried the most obvious approach with:
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
As I said before, everything works if I replace userid with email...