Netcore Api Postman 500内部服务器错误



通过poster从API到数据库的post请求给了我以下响应:{"消息":"对象名称"Accounts"无效"}

这些是我的C#代码,我不知道我做错了什么,也不知道我遗漏了什么。请帮忙。

  1. AccountsController。

    使用AutoMapper;使用Microsoft。AspNetCore。Http;使用Microsoft。AspNetCore。Mvc;使用系统;使用System。集合。通用的使用非洲生物数据测试。实体;使用非洲生物数据测试。模型。账户使用非洲生物数据测试。服务;

    namespace Africanbiomedtests.Controllers
    {
    [ApiController]
    [Route("[controller]")]
    public class AccountsController : BaseController
    {
    private readonly IAccountService _accountService;
    private readonly IMapper _mapper;
    public AccountsController(
    IAccountService accountService,
    IMapper mapper)
    {
    _accountService = accountService;
    _mapper = mapper;
    }
    [HttpPost("authenticate")]
    public ActionResult<AuthenticateResponse> Authenticate(AuthenticateRequest model)
    {
    var response = _accountService.Authenticate(model, ipAddress());
    setTokenCookie(response.RefreshToken);
    return Ok(response);
    }
    [HttpPost("refresh-token")]
    public ActionResult<AuthenticateResponse> RefreshToken()
    {
    var refreshToken = Request.Cookies["refreshToken"];
    var response = _accountService.RefreshToken(refreshToken, ipAddress());
    setTokenCookie(response.RefreshToken);
    return Ok(response);
    }
    [Authorize]
    [HttpPost("revoke-token")]
    public IActionResult RevokeToken(RevokeTokenRequest model)
    {
    // accept token from request body or cookie
    var token = model.Token ?? Request.Cookies["refreshToken"];
    if (string.IsNullOrEmpty(token))
    return BadRequest(new { message = "Token is required" });
    // users can revoke their own tokens and admins can revoke any tokens
    if (!Account.OwnsToken(token) && Account.Role != Role.Admin)
    return Unauthorized(new { message = "Unauthorized" });
    _accountService.RevokeToken(token, ipAddress());
    return Ok(new { message = "Token revoked" });
    }
    [HttpPost("register")]
    public IActionResult Register(RegisterRequest model)
    {
    _accountService.Register(model, Request.Headers["origin"]);
    return Ok(new { message = "Registration successful, please check your email for verification instructions" });
    }
    [HttpPost("verify-email")]
    public IActionResult VerifyEmail(VerifyEmailRequest model)
    {
    _accountService.VerifyEmail(model.Token);
    return Ok(new { message = "Verification successful, you can now login" });
    }
    [HttpPost("forgot-password")]
    public IActionResult ForgotPassword(ForgotPasswordRequest model)
    {
    _accountService.ForgotPassword(model, Request.Headers["origin"]);
    return Ok(new { message = "Please check your email for password reset instructions" });
    }
    [HttpPost("validate-reset-token")]
    public IActionResult ValidateResetToken(ValidateResetTokenRequest model)
    {
    _accountService.ValidateResetToken(model);
    return Ok(new { message = "Token is valid" });
    }
    [HttpPost("reset-password")]
    public IActionResult ResetPassword(ResetPasswordRequest model)
    {
    _accountService.ResetPassword(model);
    return Ok(new { message = "Password reset successful, you can now login" });
    }
    [Authorize(Role.Admin)]
    [HttpGet]
    public ActionResult<IEnumerable<AccountResponse>> GetAll()
    {
    var accounts = _accountService.GetAll();
    return Ok(accounts);
    }
    [Authorize]
    [HttpGet("{id:int}")]
    public ActionResult<AccountResponse> GetById(int id)
    {
    // users can get their own account and admins can get any account
    if (id != Account.Id && Account.Role != Role.Admin)
    return Unauthorized(new { message = "Unauthorized" });
    var account = _accountService.GetById(id);
    return Ok(account);
    }
    [Authorize(Role.Admin)]
    [HttpPost]
    public ActionResult<AccountResponse> Create(CreateRequest model)
    {
    var account = _accountService.Create(model);
    return Ok(account);
    }
    [Authorize]
    [HttpPut("{id:int}")]
    public ActionResult<AccountResponse> Update(int id, UpdateRequest model)
    {
    // users can update their own account and admins can update any account
    if (id != Account.Id && Account.Role != Role.Admin)
    return Unauthorized(new { message = "Unauthorized" });
    // only admins can update role
    if (Account.Role != Role.Admin)
    model.Role = null;
    var account = _accountService.Update(id, model);
    return Ok(account);
    }
    [Authorize]
    [HttpDelete("{id:int}")]
    public IActionResult Delete(int id)
    {
    // users can delete their own account and admins can delete any account
    if (id != Account.Id && Account.Role != Role.Admin)
    return Unauthorized(new { message = "Unauthorized" });
    _accountService.Delete(id);
    return Ok(new { message = "Account deleted successfully" });
    }
    // helper methods
    private void setTokenCookie(string token)
    {
    var cookieOptions = new CookieOptions
    {
    HttpOnly = true,
    Expires = DateTime.UtcNow.AddDays(7)
    };
    Response.Cookies.Append("refreshToken", token, cookieOptions);
    }
    private string ipAddress()
    {
    if (Request.Headers.ContainsKey("X-Forwarded-For"))
    return Request.Headers["X-Forwarded-For"];
    else
    return HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString();
    }
    }
    }
    

2(。账户机密

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace Africanbiomedtests.Entities
{
public class Account
{
public int Id { get; set; }
public string Title { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string PasswordHash { get; set; }
public bool AcceptTerms { get; set; }
public Role Role { get; set; }
public HealthcareProvider HealthcareProvider { get; set; }
public string VerificationToken { get; set; }
public DateTime? Verified { get; set; }
public bool IsVerified => Verified.HasValue || PasswordReset.HasValue;
public string ResetToken { get; set; }
public DateTime? ResetTokenExpires { get; set; }
public DateTime? PasswordReset { get; set; }
public DateTime Created { get; set; }
public DateTime? Updated { get; set; }
public List<RefreshToken> RefreshTokens { get; set; }
public bool OwnsToken(string token) 
{
return this.RefreshTokens?.Find(x => x.Token == token) != null;
}
}
}

3( 。RegisterRequest模型

using System.ComponentModel.DataAnnotations;
namespace Africanbiomedtests.Models.Accounts
{
public class RegisterRequest
{
[Required]
public string Title { get; set; }
[Required]
[StringLength(30)]
[RegularExpression(@"^[A-Z]+[a-zA-Z]*$")]
public string FirstName { get; set; }
[Required]
[StringLength(30)]
[RegularExpression(@"^[A-Z]+[a-zA-Z]*$")]
public string LastName { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[MinLength(6)]
public string Password { get; set; }
[Required]
[Compare("Password")]
public string ConfirmPassword { get; set; }
[Range(typeof(bool), "true", "true")]
public bool AcceptTerms { get; set; }
}
}

感谢John的帮助,我意识到我没有完成EF数据库迁移,所以故障出在我身上。完成了迁移,现在可以工作了。

最新更新