У меня есть следующий контроллер в моем веб-API:
[Route("api/[controller]")]
public class User_TaskController : Controller
{
private readonly IUser_TaskRepository _taskRepository;
private readonly UserManager<ApplicationUser> _userManager;
private readonly WebAPIDataContext _context;
//Controller
public User_TaskController(IUser_TaskRepository taskRepository, UserManager<ApplicationUser> userManager, WebAPIDataContext context)
{
_taskRepository = taskRepository;
_userManager = userManager;
_context = context;
}
//Get methods
[HttpGet]
public IEnumerable<User_Task> GetAll()
{
return _taskRepository.GetAll();
}
[Authorize]
[HttpGet("current")]
public IActionResult GetCurrentUserTasks()
{
// Obtain stakeholderId
var stakeholderId = this.GetStakeholderId();
var userTasks = _taskRepository.GetUserTasks(stakeholderId);
return new ObjectResult(userTasks);
}
[HttpGet("{id}", Name = "GetTask")]
public IActionResult GetById(long id)
{
var item = _taskRepository.Find(id);
if (item == null)
{
return NotFound();
}
return new ObjectResult(item);
}
//Create
[Authorize]
[HttpPost]
public IActionResult Create([FromBody] User_Task item)
{
if (item == null)
{
return BadRequest();
}
var stakeholderId = this.GetStakeholderId();
_taskRepository.Add(item, stakeholderId);
var itemToReturn = _taskRepository.Find(item.TaskId);
if (item == null)
{
return NotFound();
}
return new ObjectResult(itemToReturn);
}
private long GetStakeholderId()
{
string currentUserId = _userManager.GetUserId(User);
long stakeholderId = 0;
var users = _userManager.Users;
foreach (var user in users)
{
if (user.Email == currentUserId)
{
var idForStakeholder = user.Id;
var stakeholders = _context.Stakeholders;
foreach (var stakeholder in stakeholders)
{
if (stakeholder.IdentityId == idForStakeholder)
{
stakeholderId = stakeholder.StakeholderId;
return stakeholderId;
}
}
}
}
return stakeholderId;
}
}
И соответствующий репозиторий:
public class User_TaskRepository : IUser_TaskRepository
{
private readonly WebAPIDataContext _context;
public User_TaskRepository(WebAPIDataContext context)
{
_context = context;
}
public IEnumerable<User_Task> GetAll()
{
return _context.User_Tasks.Include(task => task.Steps).ToList();
}
// Method that returns all the tasks of a specific user i.e. logged in used making the request
public ICollection<User_Task> GetUserTasks(long stakeholderId)
{
var userTasks = _context.User_Tasks
.Where(task => task.StakeholderId == stakeholderId).ToList();
return userTasks;
}
public void Add(User_Task item , long stakeholderId)
{
item.StakeholderId = stakeholderId;
_context.User_Tasks.Add(item);
_context.SaveChanges();
}
public User_Task Find(long key)
{
return _context.User_Tasks.Include(task => task.Steps).FirstOrDefault(t => t.TaskId == key);
}
}
public interface IUser_TaskRepository
{
void Add(User_Task item, long stakeholderId);
IEnumerable<User_Task> GetAll();
ICollection<User_Task> GetUserTasks(long stakeholderId);
User_Task Find(long key);
}
Проблемы:
- Для метода создания запись добавляется в базу данных, но я не получаю ответа в Postman.
- Для получения задач для конкретных пользователей, т. е.
GetCurrentUserTasks()
до последней строки перед оператором возврата, я вижу извлеченные задачи, однако ничего не возвращает, и я все еще получаю статус 200 Ok на моем интерфейсе angular2. Я попытался удалить заголовок [Authorize], но безрезультатно.
Почему это происходит?