【问题标题】:Curl: Error: (3) Port number ended with '"'卷曲:错误:(3) 端口号以 '"' 结尾
【发布时间】:2021-11-18 21:38:10
【问题描述】:

我正在尝试获取 dot net core 2.0 web api 的令牌。

这就是我正在做的:

C:\Users\danyb>curl -X POST -H 'Content-Type:application/json'^
Mehr? -d '{\"username\":\"mario\",\"password\":\"secret\"}'^
Mehr? localhost:56183/api/token

[1/2]: '"username":"mario"'localhost:56183/api/token --> <stdout>
--_curl_--'"username":"mario"'localhost:56183/api/token
curl: (3) Port number ended with '"'

[2/2]: '"password":"secret"'localhost:56183/api/token --> <stdout>
--_curl_--'"password":"secret"'localhost:56183/api/token
curl: (3) Port number ended with '"'

我已经在网上搜索过,但找不到可行的解决方案。

TokenController 类:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

namespace JWT.Controllers
{
    [Route("api/[controller]")]
    public class TokenController : Controller
    {
        private IConfiguration _config;

        public TokenController(IConfiguration config)
        {
            _config = config;
        }

        [AllowAnonymous]
        [HttpPost]
        public IActionResult CreateToken([FromBody]LoginModel login)
        {
            IActionResult response = Unauthorized();
            var user = Authenticate(login);

            if (user != null)
            {
                var tokenString = BuildToken(user);
                response = Ok(new { token = tokenString });
            }

            return response;
        }

        private string BuildToken(UserModel user)
        {

            var claims = new[] {
                new Claim(JwtRegisteredClaimNames.Sub, user.Name),
                new Claim(JwtRegisteredClaimNames.Email, user.Email),
                new Claim(JwtRegisteredClaimNames.Birthdate, user.Birthdate.ToString("yyyy-MM-dd")),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
            };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

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

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

        private UserModel Authenticate(LoginModel login)
        {
            UserModel user = null;

            if (login.Username == "mario" && login.Password == "secret")
            {
                user = new UserModel { Name = "Mario Rossi", Email = "mario.rossi@domain.com" };
            }
            return user;
        }

        public class LoginModel
        {
            public string Username { get; set; }
            public string Password { get; set; }
        }

        private class UserModel
        {
            public string Name { get; set; }
            public string Email { get; set; }
            public DateTime Birthdate { get; set; }
        }
    }
}

我认为该错误与 Controller 无关,而与 Curl 调用本身有关。

【问题讨论】:

  • 请分享令牌控制器类
  • 游戏迟到了,但是...在命令行中引用引号,使用克拉而不是反斜杠。所以^" 在你的字符串中而不是\"
  • 如果你从 swagger/index.html 复制 curl 命令,它会在有效载荷值周围加上错误的引号。将它们更改为单引号,它将起作用

标签: api http curl asp.net-web-api


【解决方案1】:

我遇到了类似的事情,被一些特殊字符的单引号和双引号欺骗了。所以我在这里建议,确保你在命令行上正确格式化了你的 curl 请求。如果您坚持在单引号内使用双引号,则无需转义。

试试这个:

curl -X POST -H 'Content-Type:application/json' http://localhost:56183/api/token -d '{"username":"mario", "password":"secret"}'

【讨论】:

  • 双引号适用于我的 Mac,但不适用于我同事的 Mac.... ‾_(ツ)_/‾
  • 当我不对每个括号或大括号使用“\”时,会出现全局错误。由于某种原因,在 JSON 字符串之前添加“-g”不起作用。
【解决方案2】:

当我使用 Powershell 时,没有什么对我有用(JSON 总是作为 null 对象发送)。但是,当我切换到 cmd.exe 时,所有解决方案都开始起作用,无论是使用 \" 转义 ",还是使用 ^\^"

【讨论】:

    【解决方案3】:

    你应该用单引号引用你的 json 数据。

    【讨论】:

      猜你喜欢
      • 2018-04-12
      • 2020-01-26
      • 2017-12-10
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2014-01-12
      • 2017-07-06
      • 2015-04-18
      相关资源
      最近更新 更多