.net Swagger UI检索参数错误

vmpqdwk3  于 8个月前  发布在  .NET
关注(0)|答案(1)|浏览(62)

我想让员工注册和登录使用用户名和密码(1:1关系).但是在Swagger UI中有一些错误,该参数检查照片以获取更多信息:Errorand the parameter I want username and pass
代码中没有错误,我多次尝试更改AuthController.cs,但仍然相同。
还有其他课程,但我认为这些都与这个问题有关。
模特儿

using System;
using System.ComponentModel.DataAnnotations;

public class Employee
{
    public int Id { get; set; }

    public string? FirstName { get; set; }
    public string? LastName { get; set; }

    [RegularExpression(@"^\+222\d{7}$")]
    public string? PhoneNumber { get; set; }
    public string? Department { get; set; }

    public DateTime CreatedAt { get; set; }
    public DateTime UpdatedAt { get; set; }
    public bool IsDeleted { get; set; }

    public User User { get; set; }
}

User.cs

using System.ComponentModel.DataAnnotations;

public class User
{
    public int Id { get; set; }

    [Required]
    public string Username { get; set; }

    [Required]
    public string Password { get; set; }

    public Employee Employee { get; set; }
}

DBcontext.cs

using Microsoft.EntityFrameworkCore;

public class DataContext : DbContext
{
    public DataContext(DbContextOptions<DataContext> options) : base(options) { }

    public DbSet<User> Users { get; set; }
    public DbSet<Employee> Employees { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>()
            .HasOne(u => u.Employee)
            .WithOne(e => e.User)
            .HasForeignKey<Employee>(e => e.Id);

        base.OnModelCreating(modelBuilder);
    }
}

Authcontroller.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using EmployeeAPI.Models;

namespace EmployeeAPI.Controllers
{
    [Route("api/auth")]
    [ApiController]
    public class AuthController : ControllerBase
    {
        private readonly IConfiguration _configuration;
        private readonly DataContext _context;

        public AuthController(DataContext context, IConfiguration configuration)
        {
            _context = context;
            _configuration = configuration;
        }

        // User registration
        [HttpPost("register")]
        public async Task<IActionResult> Register([FromBody] User userRegistration)
        {
            if (await _context.Users.AnyAsync(u => u.Username == userRegistration.Username))
            {
                return BadRequest("Username is already taken.");
            }

            var user = new User
            {
                Username = userRegistration.Username,
                Password = PasswordHash.HashPassword(userRegistration.Password)
            };

            _context.Users.Add(user);
            await _context.SaveChangesAsync();

            return Ok("User registered successfully.");
        }

        // User login
        [HttpPost("login")]
        public async Task<IActionResult> Login([FromBody] User userLogin)
        {
            var user = await _context.Users.SingleOrDefaultAsync(u => u.Username == userLogin.Username);

            if (user == null || !PasswordHash.VerifyPassword(userLogin.Password, user.Password))
            {
                return BadRequest("Invalid username or password.");
            }

            var token = GenerateJwtToken(user);

            return Ok(new { Token = token });
        }

        private string GenerateJwtToken(User user)
        {
            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));
            var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.Sub, user.Username),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
            };

            var token = new JwtSecurityToken(
                _configuration["Jwt:Issuer"],
                _configuration["Jwt:Issuer"],
                claims,
                expires: DateTime.Now.AddMinutes(30),
                signingCredentials: credentials
            );

            return new JwtSecurityTokenHandler().WriteToken(token);
        }
    }

}

Employee.cs

using EmployeeAPI.Models;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Linq;
using System.Threading.Tasks;

namespace EmployeeAPI.Controllers
{
    [Authorize]
    [Route("api/employees")]
    [ApiController]
    public class EmployeeController : ControllerBase
    {
        private readonly DataContext _context;

        public EmployeeController(DataContext context)
        {
            _context = context;
        }

        // GET: api/employees
        [HttpGet]
        public async Task<ActionResult<PagedResult<Employee>>> GetEmployees(int page = 1, int pageSize = 10, string department = null)
        {
            var username = User.Identity.Name;

            var query = _context.Employees.AsQueryable();

            if (!string.IsNullOrEmpty(department))
            {
                query = query.Where(e => e.Department == department);
            }

            query = query.Where(e => e.User.Username == username);

            var totalItems = await query.CountAsync();
            var employees = await query.Skip((page - 1) * pageSize).Take(pageSize).ToListAsync();

            return new PagedResult<Employee>
            {
                Page = page,
                PageSize = pageSize,
                TotalItems = totalItems,
                Data = employees
            };
        }


// Soft delete an employee
[HttpDelete("{id}")]
public async Task<IActionResult> SoftDeleteEmployee(int id)
{
    var username = User.Identity.Name;
    
    var employee = await _context.Employees.FirstOrDefaultAsync(e => e.Id == id && e.User.Username == username);
    
    if (employee == null)
    {
        return NotFound();
    }
    
    employee.IsDeleted = true;
    employee.UpdatedAt = DateTime.UtcNow;
    
    await _context.SaveChangesAsync();
    
    return NoContent();
}


// Update an employee
[HttpPut("{id}")]
public async Task<IActionResult> UpdateEmployee(int id, Employee updatedEmployee)
{
    var username = User.Identity.Name;

    var existingEmployee = await _context.Employees.FirstOrDefaultAsync(e => e.Id == id && e.User.Username == username);

    if (existingEmployee == null)
    {
        return NotFound();
    }

    // Update the properties you want to change
    existingEmployee.FirstName = updatedEmployee.FirstName;
    existingEmployee.LastName = updatedEmployee.LastName;
    existingEmployee.PhoneNumber = updatedEmployee.PhoneNumber;
    existingEmployee.Department = updatedEmployee.Department;
    existingEmployee.UpdatedAt = DateTime.UtcNow;

    await _context.SaveChangesAsync();

    return NoContent();
}

    }
}
ecfdbz9o

ecfdbz9o1#

如果你解释属性下面的红线,它是你的平台的拼写检查器,是可验证的。
你的代码是真的,如果你的代码运行没有任何错误,不要注意红线和去。

相关问题