繁体   English   中英

如何正确创建 ASP.NET 内核 Web API

[英]How to create ASP.NET Core Web API properly

我不太确定自己的行为。 我开始了我的第一个 web api 应用程序。 所以我想创建 api 所有功能都包括授权。 web 和移动应用程序将与我的 api 一起使用。 类似的东西

但我发现授权步骤有问题。 我必须处理许多api 的响应变化,例如 401(未经授权)、200(OK)等。我得到 Json 格式的响应。 每个响应都有自己的结构,并且在不同的情况下其结构会发生变化。 所以这就是我可能会错过处理某些事情并使我的应用程序崩溃的问题。 我怎样才能避免它。 可能是我误解了什么。 我会很感激任何帮助。

我在 asp.net 核心框架上创建 API。

一些响应示例

OK 200 {"result":{"succeeded":true,"isLockedOut":false,"isNotAllowed":false,"requiresTwoFactor":false},"token":"eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJuYW1laWQiOiI5YjkwZDFmZC1iMjQzLTRhMTEtYWQ3NS1iZWU0ZDJjNTJhNTEiLCJ1bmlxdWVfbmFtZSI6IkVlZm9zZmF0dXMxMzNAZ21haWwuY29tIiwibmJmIjoxNTkzOTU4MjM4LCJleHAiOjE1OTQwNDQ2MzgsImlhdCI6MTU5Mzk1ODIzOH0.AUjS7ocjp3Z_HuU1QqBPUG4NlNcRAihjOhbKBAC_6ecjjlZQM417M9KKGEk1uAr0yKFl9dcPNo04YPSKs-vJ7g"}

401未经授权

{"type":"https://tools.ietf.org/html/rfc7235#section-3.1","title":"Unauthorized","status":401,"traceId":"|9ca7ae31-444c9220bfc1657b.1.88f5b6d2_"}

API 的动作举例

public async Task<IActionResult> Login(LoginModel loginModel)
    {
        if (ModelState.IsValid)
        {
            Microsoft.AspNetCore.Identity.SignInResult result = await _signInManager.PasswordSignInAsync
                (loginModel.Email, loginModel.Password, loginModel.RememberMe, false);

            if (result.Succeeded)
            {
                User user = await _userManager.FindByNameAsync(loginModel.Email);
                ServiceResponse response = new ServiceResponse()
                {
                    Result = result,
                    Token = CreateToken(user)
                };
                return Ok(response);
            }
            else
            {
                return Unauthorized();
            }
        }
        return NoContent();

    }

您应该为您的响应创建一个 model 并以该结构返回您的所有响应。

例子:

public class ResponseModel
{
    public bool Succeeded { get; set; }
    
    public string Message { get; set; }
    
    public object Content { get; set; }
}

Ok Response structure : 
{
    "succeeded" : true,
    "message" : "some-message",
    "content" : {
        "isLockedOut" : false,
        "isNotAllowed" : false,
        ...
        ..
    } 
}

UnAuthorized Response structure :
{
    "succeeded" : false,
    "message" : "some-message",
    "content" : {
        "title" : "unauthorized",
        "status" : "401",
        ...
        ...
    } 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM