【问题标题】:.NET Core - not able to apply RESTful API.NET Core - 无法应用 RESTful API
【发布时间】:2021-04-22 10:21:51
【问题描述】:

我正在创建 API 并使其与 SQL Server 连接。

我刚刚为我的应用程序完成了注册用户 API,它运行良好。
已在数据库中创建用户。

当我为用户开发 GET API 时,我发现即使我有很多在线教程也很难做到。

我主要关注源码here

控制器/UserController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using CCCC_server.Authentication;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;

namespace CCCC_server.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UsersController : ControllerBase
    {
        private readonly IConfiguration _configuration;

        public UsersController(IConfiguration configuration)
        {
            _configuration = configuration;
        }

        [HttpGet]
        // How to start from here in order to get all register user?

    }
}

控制器/AuthenticationController.cs

using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
using CCCC_server.Authentication;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;

namespace CCCC_server.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class AuthenticationController : ControllerBase
    {
        private readonly UserManager<ApplicationUser> userManager;
        private readonly IConfiguration _configuration;

        public AuthenticationController(UserManager<ApplicationUser> userManager, IConfiguration configuration)
        {
            this.userManager = userManager;
            _configuration = configuration;
        }

        [HttpPost]
        [Route("Register")]
        public async Task<IActionResult> Register([FromBody] RegisterModel model)
        {
            var userExist = await userManager.FindByNameAsync(model.UserName);
            if (userExist != null)
                return StatusCode(StatusCodes.Status500InternalServerError, new Response { Status = "Error", Message = " User Already Exist" });

            ApplicationUser user = new ApplicationUser
            {
                Email = model.Email,
                SecurityStamp = Guid.NewGuid().ToString(),
                UserName = model.UserName
            };

            var result = await userManager.CreateAsync(user, model.Password);
            if (!result.Succeeded)
                return StatusCode(StatusCodes.Status500InternalServerError, new Response { Status = "Error", Message = "Failed to register new user" });

            return Ok(new Response { Status = "Success", Message = "User Created Successfully" });
        }

            return Unauthorized();
        }

    }


}

身份验证/RegisterModel.cs

using System;
using System.ComponentModel.DataAnnotations;

namespace CCCC_server.Authentication
{
    public class RegisterModel
    {
        [Required(ErrorMessage = "Username is required")]
        public string UserName { get; set; }

        [Required(ErrorMessage = "Email is required")]
        public string Email { get; set; }

        [Required(ErrorMessage = "Password is required")]
        public string Password { get; set; }

    }
}

【问题讨论】:

标签: c# .net sql-server asp.net-core


【解决方案1】:

据我所知,用户管理器将包含 Users.ToListAsync() 方法,该方法可以将所有用户查询到列表模型中。

然后你可以直接将列表模型返回给客户端,asp.net核心会将其转换为json。

更多细节,您可以参考以下代码:

[Route("api/[controller]")]
[ApiController]
public class UsersController : Controller
{
    private readonly IConfiguration _configuration;
     private readonly UserManager<ApplicationUser> _userManager;

    public UsersController(IConfiguration configuration, 
 UserManager<ApplicationUser> userManager)
    {
        _configuration = configuration;
        _userManager = userManager;
    }

    [HttpGet]
    // How to start from here in order to get all register user?
    public async Task<IActionResult> Get()
    {
        //This should be the list of users
        var users = await _userManager.Users.ToListAsync();
        return Json(users);
    }

}

【讨论】:

  • The name Json does not exist in current context。如何解决?
  • 你能告诉我你用的是哪个asp.net核心版本吗?在 2.1 或 2.0 之后?在 asp.net core 2.1 ControllerBase 之后默认不包含 json。我建议你可以尝试使用控制器而不是控制器库。
猜你喜欢
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2020-03-24
  • 1970-01-01
  • 2021-12-16
相关资源
最近更新 更多