如何在现有的ASP.NET MVC项目中实现API控制器?

时间:2018-04-06 19:03:59

标签: asp.net asp.net-mvc jwt asp.net-core-webapi

我有一个.NET Core网站。它使用ASP.NET身份。我现在正在为该网站构建一个Xamarin应用程序。我已将令牌发行者操作实施到现有的帐户控制器中,因此我可以对该站点进行授权调用。

// POST: /Account/Token
    [HttpPost]
    [AllowAnonymous]
    public async Task<IActionResult> Token(LoginViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = await UserManager.FindByEmailAsync(model.Email);
            if (user != null)
            {

                var result = await _signInManager.CheckPasswordSignInAsync
                                (user, model.Password, lockoutOnFailure: false);

                if (!result.Succeeded)
                {
                    return Unauthorized();
                }

                var claims = new[]
                {
                    new Claim(JwtRegisteredClaimNames.Sub, model.Email),
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
                };

                var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("A Super Security Key"));
                var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

                var token = new JwtSecurityToken(
                    issuer: "Issuer",
                    audience: "IssuerA",
                    claims: claims,
                    expires: DateTime.Now.AddDays(7),
                    signingCredentials: creds);
                return Ok(new { token = new JwtSecurityTokenHandler().WriteToken(token) });

                //return new JwtSecurityTokenHandler().WriteToken(token);
            }
        }
            return BadRequest("Could not verify username and password");
    }   

这似乎有效。我可以通过邮递员的请求获得令牌。

所以,我现在需要实现一个控制器来使我的应用程序调用令牌。我试图添加一个标准控制器 -

public class TestController : Controller
{
    [HttpGet]
    //[Authorize]
    [AllowAnonymous]
    public IActionResult Test()
    {
        return Ok("test");
    }
}

如果我是AllowAnonymous,这只会被调用。如果我启用授权,它将不会返回我未经授权,甚至输入请求中包含的令牌。

我想我应该以某种方式添加API控制器,这是正确的吗?我该怎么做呢?欢迎任何其他建议。这是我目前的布局:

enter image description here

0 个答案:

没有答案