c# - 如何正确创建 ASP.NET Core Web API
问题描述
我对自己的行为有点不确定。我开始了我的第一个 Web api 应用程序。所以我想创建所有功能都包括授权的api。以及将与我的 api 一起使用的网络和移动应用程序。类似的东西
但我发现授权步骤有问题。我必须处理许多api 的响应变化,如 401(未经授权)、200(OK)等。我得到 Json 格式的响应。每个响应都有自己的结构,并且在不同的情况下其结构会发生变化。所以这就是我可能会错过处理某些事情并使我的应用程序崩溃的问题。我怎样才能避免它。可能是我误解了什么。我会很感激任何帮助。
我在 asp.net 核心框架上创建 API。
一些响应示例
好的 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();
}
解决方案
您应该为您的回复创建一个模型,并以该结构返回您的所有回复。
例子:
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",
...
...
}
}
推荐阅读
- python - pytest - 使用仅在运行时计算的参数对测试进行参数化
- erlang - Erlang:异常错误:读取文本文件时右侧值{error,enoent}不匹配
- swift - Swift Google Maps 未进入安全区域
- node.js - 带有 npm 模块的“语法错误:无法在模块外使用 import 语句”
- javascript - 如何获取输入/选择信息,然后从那里打印数据库信息。这可能吗?
- networking - 从 WLAN 中继器到基站路由器的网络打印机反射
- box - 将文件上传到 Box 时出现格式错误的流
- excel - VBA - 粘贴事件和撤消粘贴的最后一个动作
- php - $oQueryBuilder->getQuery()->getResult() 的问题
- python - Python脚本关闭时结束执行子进程