web-dev-qa-db-ja.com

カール:エラー:(3)ポート番号は '"'で終了しました

ドットネットコア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 '"'

すでにWebを検索しましたが、有効なソリューションが見つかりませんでした。

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 = "[email protected]" };
            }
            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; }
        }
    }
}

このエラーは、コントローラーとは関係ありませんが、Curl呼び出し自体とは関係ないと思います。

(スタックオーバーフローはコードが多すぎると考えているため、テキストを追加する必要があります。したがって、ここでいくつかの素晴らしいLorem Ipsumがあります。) voluptua。 vero eos et accusam et justo duo dolores et ea rebum。クリタ・カスド・グベルグレン、シータキマタ・サンクトゥス・エスト・ロレム・イプサム・ドロア・シット・アメットをステット。座って、サディプスエリートを設定し、sed diam nonumy eirmod tempor invidunt ut Labore et dolore magna aliquyam erat、sed diam voluptua。 vero eos et accusam et justo duo dolores et ea rebum。クリタ・カスド・グベルグレン、シータキマタ・サンクトゥス・エスト・ロレム・イプサム・ドロア・シット・アメットをステット。

13

私は似たような何かに出くわし、いくつかの特殊文字の一重引用符と二重引用符にだまされました。そのため、ここでアドバイスするように、コマンドラインでcurlリクエストを正しくフォーマットしたことを確認してください。単一引用符内の二重引用符に固執する場合、エスケープする必要はありません。

これを試してください:

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