【问题标题】:How to pass values to an ASP.Net Core APiController using Postman如何使用 Postman 将值传递给 ASP.Net Core APiController
【发布时间】:2020-01-25 04:08:20
【问题描述】:

我的项目从 Postman 读取几个键值并生成 JWT

但是在我将[ApiController] 属性添加到控制器代码后,我得到了 Error415

这是我的控制器代码

[Route("api/[controller]")]
    //[ApiController]                  //When I uncomment this attribute, I get Error 415 on postman
    public class AuthController : Controller
    {
        private UserManager<ApplicationUser> _userManager;

        public AuthController(UserManager<ApplicationUser> usermanager)
        {
            _userManager = usermanager;
        }

        [HttpPost]
        [Route("login")]
        public async Task<IActionResult> Login(LoginModel model)
        {
            var user = await _userManager.FindByNameAsync(model.Username);
            if (user != null && await _userManager.CheckPasswordAsync(user, model.Password))
            {
                //get roles and claims of the logged in user
                var _roles = await _userManager.GetRolesAsync(user);
                var _claims = await _userManager.GetClaimsAsync(user);

                //add roles and claims from DB to JWT claims
                var claims = new List<Claim>();
                foreach (var role in _roles)
                {
                    claims.Add(new Claim(ClaimTypes.Role, role));
                }

                foreach (var claim in _claims)
                {
                    claims.Add(new Claim(claim.Type, claim.Value));
                }

                //security key
                string _securityKey = "A super secure key";
                //symmetric security key
                var _symmetricSecurityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_securityKey));
                //signing credentials
                var _signingCredentials = new SigningCredentials(_symmetricSecurityKey, SecurityAlgorithms.HmacSha256Signature);

                //create token
                var _token = new JwtSecurityToken(
                    issuer: "issuer",
                    audience: "audience",
                    expires: DateTime.UtcNow.AddHours(1),
                    claims: claims,
                    signingCredentials: _signingCredentials
                    );
                return Ok(new JwtSecurityTokenHandler().WriteToken(_token));
            }
            return Unauthorized();
        }
    }

添加[ApiController] 需要进行哪些更改?

【问题讨论】:

  • ApiController 默认使用 Json。您需要明确从何处绑定数据。由于正在发送表单数据,因此需要使用 [FromForm] 属性。即Task&lt;IActionResult&gt; Login([FromForm]LoginModel model)
  • 同时使用[HttpPost("login")] 而不是两个属性。

标签: c# asp.net asp.net-core asp.net-web-api postman


【解决方案1】:

您可以使用[FromForm] 属性来告诉模型绑定器它应该从表单中读取数据,或者您可以更改您的请求并将您的请求正文作为 json 发送,只需在 postman 中切换到 raw 并将 type 设置为 json .

【讨论】:

    【解决方案2】:

    您可以在 Header 选项卡和控制器中设置 Content-Type : application/json 设置 Login([FromForm]LoginModel 模型) 或 Login([ FromBody]LoginModel 模型)根据您要发送数据的位置。

    【讨论】:

      猜你喜欢
      • 2020-11-25
      • 2020-09-22
      • 2019-09-09
      • 2020-08-23
      • 2020-12-18
      • 2019-02-22
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多