国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ASP.Net Core Web API結合Entity Framework Core框架(API的創(chuàng)建使用,接口前端權限設置,前端獲取API的Get,post方法)(程序包引用以及導入數(shù)據(jù)庫)

這篇具有很好參考價值的文章主要介紹了ASP.Net Core Web API結合Entity Framework Core框架(API的創(chuàng)建使用,接口前端權限設置,前端獲取API的Get,post方法)(程序包引用以及導入數(shù)據(jù)庫)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1. Web Api 程序包引用

2. Web Api 的創(chuàng)建與Http類型的介紹

2.1?ASP.Net Core Web API項目的創(chuàng)建

2?.2? API接口的創(chuàng)建

2.3?HttpGet和HttpPost類型的區(qū)別

3.接口權限設置

4.HttpGet方法和HttpPOst方法

5.前端中用HttpGet/Poset獲取接口數(shù)據(jù)

6.EF框架——配置數(shù)據(jù)庫鏈接字符串(即將數(shù)據(jù)庫中的表導入項目中)

7.Web Api和EF結合的增刪改查需注意的部分代碼

?8. 當web返回給窗體如下特殊字符串時,在web端的program 的main函數(shù)中加入以下代碼:

1. Web Api 程序包引用

Entity Framework (EF) Core 是輕量化、可擴展、開源和跨平臺版的常用 Entity Framework 數(shù)據(jù)訪問技術。

EF Core 可用作對象關系映射程序 (O/RM),這可以實現(xiàn)以下兩點:

  • 使 .NET 開發(fā)人員能夠使用 .NET 對象處理數(shù)據(jù)庫。
  • 無需再像通常那樣編寫大部分數(shù)據(jù)訪問代碼。

準備工作:

1.創(chuàng)建項目:打開Visual Studio2022,選擇ASP.NET Core Web應用空項目基于.Net6 創(chuàng)建
2.安裝Nuet程序包——項目——依賴項——管理NuGet程序包(版本等級盡量一樣)

Microsoft.EntityFrameworkCore.SqlServer (適用于EF Core SQL Server 提供程序)
Microsoft.EntityFrameworkCore.Design(適用于EF Core .NET Core CLI 工具 )
Microsoft.EntityFrameworkCore.Tools(適用于 EF Core 的包管理器控制臺工具)

Microsoft.EntityFrameworkCore.Design

2. Web Api 的創(chuàng)建與Http類型的介紹

2.1?ASP.Net Core Web API項目的創(chuàng)建

1.通過vs建立一個ASP.Net Core Web API項目;(如果沒有在搜索模板中找到它,就將模板欄滑動到最后,點擊藍色字體安裝多個工具和功能),然后選中如圖2所示2,再安裝。

.net core webapi框架,.net core,c#.net core webapi框架,.net core,c#

2?.2? API接口的創(chuàng)建

生成項目后,解決方案會自動生成 Controllers 文件夾,里面存放的就是接口;

創(chuàng)建:

需要注意得是:命名方法一般為 名字+后綴 Controller;(不影響接口的名字,還是前部分樣式) 最大字體為接口名稱

.net core webapi框架,.net core,c#.net core webapi框架,.net core,c#

創(chuàng)建方式:

1.創(chuàng)建 API控制器

????????點擊文件夾右鍵添加 控制器 選則 通用API Api控制器,之后生成如下二代碼,此時的接口還是不能用的;

.net core webapi框架,.net core,c#.net core webapi框架,.net core,c#

2.需要聲明接口?[ApiController]? 和一級接口路徑[Route("Test")]

????????(聲明接口是必須的,聲明接口路徑最好還是帶上--可以起個和接口名一樣的路徑好用);

3.正式定義接口和接口類型;

????????在這里直介紹[HttpGet("getUsers")]和[HttpPost("getUsers")]兩種接口類型 格式:接口類型+方法

注意:接口類型()中填寫的是二級路徑(自定義),效果如上白藍色圖 藍色GET 是類型,Test一級路徑?getUser就是二級路徑即接口類型中的路徑? ;

完整代碼:

 [ApiController] //聲明是一個API接口
    [Route("Test")] //路由:api接口的路徑
    public class TestController : Controller
    {
        /// <summary>
        /// 獲取所有人員數(shù)據(jù)
        /// </summary>
        /// <returns></returns>
        [HttpGet("getUsers")]
        public List<User> GetUsers()
        {
            List<User> list = UserManager.CreateUsers();
            return list;
        }
    }

2.3?HttpGet和HttpPost類型的區(qū)別

1.傳入?yún)?shù)不同

HttpGet:傳入個體基本類型 如:(int,string 可傳多個);

HttpPost:傳入的是主題參數(shù),當然也可以傳入個體參數(shù);

  [HttpGet("getUserById")]
        public User GetUserById(int id)
        {
            return UserManager.GetUserById(id);
        }

//User 是一個內(nèi)容
  [HttpPost("add")]
        public User Add(User user)
        {
            //List<User> users = new List<User>();
            return UserManager.Add(user);
        }

2.HttpGet接口執(zhí)行后 返回的 Request URL路徑可以在通過瀏覽器打開,如下圖:

執(zhí)行的就是get 網(wǎng)址,和執(zhí)行效果圖 圖一相對應

.net core webapi框架,.net core,c#

?

運行效果圖

.net core webapi框架,.net core,c#.net core webapi框架,.net core,c#

?執(zhí)行效果圖

.net core webapi框架,.net core,c#.net core webapi框架,.net core,c#

?

?

3.接口權限設置

1.創(chuàng)建一個類,并繼承?ActionFilterAttribute

2.重寫方法:OnActionExecuting? 和?OnActionExecuted 方法

public class Intercept : ActionFilterAttribute
    {
        //在請求接口之前
         public override void OnActionExecuting(ActionExecutingContext context)
        {

        }
        //在請求接口之后
         public override void OnActionExecuted(ActionExecutedContext context)
        {
           
        }
    }

3.在OnActionExecuting? 方法中設置權限和Token

注:接口權限只有后半部分,通過id,和路徑判斷權限表中是否有對應的數(shù)據(jù)(看個人習慣,可以將存入表中數(shù)據(jù)當為賦予權限,當返回不為空就是有權限;也可以認為存入表中的數(shù)據(jù)是禁止權限,這樣返回不為空,說明沒有權限)

 public override void OnActionExecuting(ActionExecutingContext context)
        {
            Debug.Write("攔截之前");
            //獲取請求路徑
            string path = context.HttpContext.Request.Path;
            Debug.Write("請求路徑:" + path);

            //當?shù)卿浭钦埱舐窂降臅r候不用攔截
            if (path != "/baseuser/login")
            {
                //----------------------------登錄Token攔截-------------------------
                //此時獲取前端參數(shù),沒有用到前端,單純的接口,用此方法獲取token值
                //object? tokenObj = context.ActionArguments["token"];
                //前端用到get,Post方法,用從頭部獲取  Taken  數(shù)據(jù)
                object? tokenObj = context.HttpContext.Request.Headers["token"];
                if (tokenObj == null || string.IsNullOrEmpty(tokenObj.ToString()))
                {
                    context.Result = new JsonResult(WebApiResponse.Create(1, "非法登錄"));
                }
                else
                {
                    //登陸時返回token返回值
                    string token = tokenObj.ToString();
                    //通過token 返回對應的 人員id ,登陸的時候會返回一個Token值,將人員id和Token存儲到鍵值對中,
                    //此時通過GetIdByToken方法判斷鍵值對中是否有對應的值
                    int userId = UserData.GetIdByToken(token);
                    if (userId == -1)
                    {
                        //直接返回一個結果,修改請求的返回值,請求接口的方法不能執(zhí)行,攔截之后的方法也不能執(zhí)行
                        context.Result = new JsonResult(WebApiResponse.Create(2, "請重新登錄"));
                        return;
                    }
                    //查詢?nèi)藛T信息
                    BaseUser user = UserData.GetDataById(userId);
                    if (user == null)
                    {
                        context.Result = new JsonResult(WebApiResponse.Create(3, "用戶不存在"));
                        return;
                    }
                    //---------------------------------接口權限攔截-----------------------------------
                    FilterData data = UserFilterData.GetFilteData_ByApiPath(userId, path);
                    if (data != null)
                    {
                        context.Result = new JsonResult(WebApiResponse.Create(4, "用戶沒有權限"));
                        return;
                    }

                }
            }
        }

4.上述設置中用到的封裝方法?GetIdByToken(),GetFilteData_ByApiPath()

 //寫在登錄接口中,將token和id存入
UserData.AddToken(token, data.Id);
//---------------------有關token的方法---------------------
 /// <summary>
        // 存放所有登錄的Token值,鍵:token值,  值:人員id
       
        public static readonly Dictionary<string, int> Tokens = new Dictionary<string, int>();
         // 添加一個Taken 值
        public static void AddToken(string token, int id)
        {
            Tokens[token] = id;
        }
        public static int GetIdByToken(string token)
        {
            //通過taken尋找對應的 id 人員
            if (Tokens.ContainsKey(token))
            {
                return Tokens[token];
            }
            else
            {
                return -1;
            }
        }
//----------------------通過獲取的接口地址查詢權限表,看返回結果是否為空-----------
 //1.緩存的權限集合  存放權限,所以需要有權限數(shù)據(jù)類,即權限包含了什么
        public static List<FilterData> filterDatas = new List<FilterData>();
        /// <summary>
        /// 3.  通過id或者接口路徑來  獲取權限
        /// </summary>
        /// <param name="userid">用戶id</param>
        /// <param name="apipath">接口地址</param>
        /// <returns></returns>
        public static FilterData GetFilteData_ByApiPath(int userid, string apipath)
        {
            string str = $"{userid}_{apipath}";//數(shù)據(jù)肯定是唯一的
            //判斷是否符合權限信息
            FilterData data = filterDatas.FirstOrDefault(x => x.UserIdAndApiPath == str);
            if (data != null)
            {
                return data;
            }
            //如果沒有則需要產(chǎn)生,且存入緩存集合
            WebApiContext context = null;
            try
            {
                context = new WebApiContext();
                //從數(shù)據(jù)庫中查照符合的
                BaseRoot? baseRoot = context.BaseRoots.FirstOrDefault(x => x.UserId == userid && x.ApiPath == apipath);
                if (baseRoot == null)
                {
                    return null;
                }
                //存在就存入緩存集合中
                data = new FilterData();
                data.Id = baseRoot.Id;
                data.UserId = baseRoot.UserId;
                data.ApiPath = baseRoot.ApiPath;
                data.FilterName = baseRoot.RootName;
                filterDatas.Add(data);
                return data;
            }
            catch (Exception ex)
            {
                Debug.WriteLine($"查詢數(shù)據(jù)失?。簕ex.Message}");
                return null;
            }
            finally
            {
                context?.Dispose();
            }
        }
public class FilterData
{
    public int Id { get; set; }  //id
    public int UserId { get; set; }//人員id
    public string ApiPath { get; set; }//操作接口路徑
    public string? FilterName { get; set; }//權限名稱
    public string UserIdAndApiPath
    {
        get => $"{UserId}_{ApiPath}";
    }

}

4.HttpGet方法和HttpPOst方法

 public class ApiHttp
    {
        
        private static string Token { get; set; } = "123456";
        /// <summary>
        /// get請求方法
        /// </summary>
        /// <param name="path">地址</param>
        /// <param name="param">參數(shù)</param>
        /// <param name="timeout">請求超時時間,以毫秒為單位</param>
        /// <returns></returns>
        public static string ApiGet(string path,string param,int timeout)
        {
            //path:http://127.0.0.1:5000
            //param:id=1&name=張三
            //參數(shù)+路徑:http://127.0.0.1:5000?id=1&name=張三

            string pathAndParam = path;
            if (!string.IsNullOrEmpty(param))
            {
                pathAndParam += "?" + param;
            }
            //創(chuàng)建一個HttpWebRequest對象,用來請求后臺
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pathAndParam);
            request.Method = "GET"; //請求方式:GET,POST,PUT, DELETE
            request.Timeout = timeout; //請求超時時間
            request.ContentType = "application/json;UTF-8"; //設置類型5
            request.Headers.Add("token", Token); //請求頭
            WebResponse response = request.GetResponse(); //相當于后臺返回的對象
            Stream stream = response.GetResponseStream(); //response流
            StreamReader sr = new StreamReader(stream, Encoding.UTF8);
            string json = sr.ReadToEnd(); //讀取接口返回的數(shù)據(jù)
            //釋放對象
            response.Close();
            sr.Close();
            stream.Close();
            return json;
        }
        /// <summary>
        /// post請求方法
        /// </summary>
        /// <param name="path">請求路徑</param>
        /// <param name="param">參數(shù)</param>
        /// <param name="body">主題內(nèi)容</param>
        /// <param name="timeout">請求超時時間,以毫秒位單位</param>
        /// <returns></returns>
        public  static string ApiPost(string path, string param, string body, int timeout = 5000)
        {
            string pathAndParam = path;
            if (!string.IsNullOrEmpty(param))
            {
                pathAndParam += "?" + param;
            }
            //創(chuàng)建一個HttpWebRequest對象,用來請求后臺
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(pathAndParam);
            request.Method = "POST";
            request.Timeout = timeout;
            request.ContentType = "application/json;UTF-8"; //設置類型; //設置類型
            request.Headers.Add("token", Token); //請求頭
            //把主體內(nèi)容添加到請求數(shù)據(jù)中
            if (!string.IsNullOrEmpty(body))
            {
                byte[] buffer = Encoding.UTF8.GetBytes(body);
                request.ContentLength = buffer.Length; //主體內(nèi)容的字節(jié)長度
                Stream requestStream = request.GetRequestStream(); //存放請求的數(shù)據(jù)
                requestStream.Write(buffer, 0, buffer.Length); //把主體內(nèi)容寫到流中
            }
            WebResponse response = request.GetResponse();
            Stream responseStream = response.GetResponseStream();
            StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
            string json = sr.ReadToEnd();
            return json;
        }
        public class JsonData<T>
        {
            public int Code { get; set; }
            public string Message { get; set; }
            //public List<Dictionary<string, object>> Data { get; set; }
            //public List<BaseUser> Data { get; set; }

            public T Data { get; set; }
        }
    }
}

5.前端中用HttpGet/Poset獲取接口數(shù)據(jù)

   //接口地址
string HttpPath { get; set; } = "http://127.0.0.1:5000";//和圖中沒有對應,需要自己注意
//get
   string json = Http.ApiHttp.ApiGet($"{HttpPath}/TAH/TAH", null, 50000);
//Post
 string json = ApiPost($"{HttpPath}/baseuser/updata", null, $"{body}");

注意:對應的參數(shù)在4中有說明,方法中對應的地址形式實際是下圖中對應的地址,要仔細了解方法中是如何形成接口對應的地址的

.net core webapi框架,.net core,c#

6.EF框架——配置數(shù)據(jù)庫鏈接字符串(即將數(shù)據(jù)庫中的表導入項目中)

?視圖 ——其他窗口——程序包管理器控制臺? ?輸入以下指令,將數(shù)據(jù)庫中的表導入程序中

Scaffold-DbContext -Force "Server=192.168.218.26;Database=zy04_db4;uid=zy04;Password=123456;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Context WebApiContext
  • server:數(shù)據(jù)庫所在的主機ip地址
  • DataBase:數(shù)據(jù)庫名稱
  • uid:用戶名
  • PassWorf:密碼
  • Models:存放自動創(chuàng)建的實體類的文件夾(可以自己命名)
  • WebApiContext:直接操作數(shù)據(jù)庫的類名(可以自己命名)
  • 有了WebApiContext類之后,不用再寫連接數(shù)據(jù)庫的邏輯了,只需要實例對應的數(shù)據(jù)表就可以操作如:
  • WebApiContext con=new WebAiContext();
    List<BaseUser> list=con.BaseUsers.ToList();//查詢所有

7.Web Api和EF結合的增刪改查需注意的部分代碼

1.通過***查找:FirstOrDefault

WebApiContext context = null;
      context = new WebApiContext();
      BaseUser user = context.BaseUsers.FirstOrDefault(x => x.Id == id);

2.增刪改之后,需要保存

context.BaseRoles.Update(role);
context.BaseRoles.Add(role);    
context.BaseRoles.Remove(role);            
context.SaveChanges();

?8. 當web返回給窗體如下特殊字符串時,在web端的program 的main函數(shù)中加入以下代碼:

.net core webapi框架,.net core,c#?

?親測有用:文章來源地址http://www.zghlxwxcb.cn/news/detail-717720.html

builder.Services.AddControllersWithViews().AddJsonOptions(options =>
            {
                options.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);
            });

到了這里,關于ASP.Net Core Web API結合Entity Framework Core框架(API的創(chuàng)建使用,接口前端權限設置,前端獲取API的Get,post方法)(程序包引用以及導入數(shù)據(jù)庫)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • ASP.NET Core Web API 流式返回,逐字顯示

    ASP.NET Core Web API 流式返回,逐字顯示

    Websocket、SSE(Server-Sent Events)和長輪詢(Long Polling)都是用于網(wǎng)頁和服務端通信的技術。 Websocket是一種全雙工通信協(xié)議,能夠?qū)崿F(xiàn)客戶端和服務端之間的實時通信。它基于TCP協(xié)議,并且允許服務器主動向客戶端推送數(shù)據(jù),同時也允許客戶端向服務器發(fā)送數(shù)據(jù)。 SSE是一種單向

    2023年04月23日
    瀏覽(21)
  • ASP.NET Core Web API之Token驗證

    ASP.NET Core Web API之Token驗證

    在實際開發(fā)中,我們經(jīng)常需要對外提供接口以便客戶獲取數(shù)據(jù),由于數(shù)據(jù)屬于私密信息,并不能隨意供其他人訪問,所以就需要驗證客戶身份。那么如何才能驗證客戶的什么呢?今天以一個簡單的小例子,簡述ASP.NET Core Web API開發(fā)過程中,常用的一種JWT身份驗證方式。僅供學

    2024年02月11日
    瀏覽(22)
  • ASP.NET Core Web API入門之三:使用EF Core

    ASP.NET Core Web API入門之三:使用EF Core

    一般來講我們做項目都會用實體類跟數(shù)據(jù)庫實體進行關系對應,這樣的好處方便我們維護、增刪改查,并且可以減少SQL的編寫,從而統(tǒng)一風格,那么 Entity Framework Core 就是很不錯的ORM框架。 1、跨數(shù)據(jù)庫支持能力強大,只需修改配置就可以輕松實現(xiàn)數(shù)據(jù)庫切換。 2、提升了開發(fā)效

    2024年02月10日
    瀏覽(21)
  • 2.1 .net 8 ASP.NET Core Web API - Controller詳解

    2.1 .net 8 ASP.NET Core Web API - Controller詳解

    書接上回,上節(jié)我們留了幾個問題,即: 1、接口Hello的名字究竟怎么來的? 2、我們?nèi)绻氚呀涌诟某善渌拿Q,應該怎么做? 3、我們繼承ControllerBase,以及[Route(“[controller]”)]屬性,又是分別起到什么作用? 需要解決以上幾個問題,我們就要繼續(xù)深入研究Controller相關的

    2024年02月20日
    瀏覽(21)
  • ASP.NET Core 中基于 Controller 的 Web API

    ASP.NET Core 中基于 Controller 的 Web API

    客戶端發(fā)送Http請求,Contoller響應請求,并從數(shù)據(jù)庫讀取數(shù)據(jù),序列化數(shù)據(jù),然后通過 Http Response返回序列化的數(shù)據(jù)。 Web API 的所有controllers 一般繼承于 ControllerBase 類,而不是Controller 類。 因為 Controller 類也繼承自ControllerBase 類,但是支持views,而API一般不需要這個功能。 Co

    2024年02月10日
    瀏覽(29)
  • ASP.NET中使用Entity Framework(EF)關聯(lián)表查詢

    在ASP.NET中使用Entity Framework(EF)進行關聯(lián)表查詢的具體步驟如下: 配置數(shù)據(jù)庫上下文(DbContext):在 DbContext 派生類中,使用 DbSetT 屬性表示每個實體對應的數(shù)據(jù)庫表。確保每個實體類和關系都正確映射到數(shù)據(jù)庫表。 定義關聯(lián)表之間的導航屬性:在實體類中,使用導航屬性表

    2024年02月14日
    瀏覽(20)
  • 【c#,.NET】Entity Framework Core基礎詳解

    【c#,.NET】Entity Framework Core基礎詳解

    目錄 ? 一、EF Core概述 1.1 什么是ORM?? 1.2 EF Core的性能怎么樣? 二、EF Core入門 2.1 什么是Migration數(shù)據(jù)庫遷移: 2.2? EF Core數(shù)據(jù)的增刪改查 2.2.1 增加數(shù)據(jù) 2.2.2 查詢數(shù)據(jù) ?2.2.3 修改和刪除數(shù)據(jù) 三、EF Core的實體類配置 3.1 約定大于配置 3.2 EF Core兩種配置方式 3.2.1 Data Annotation 3.2.2?

    2024年02月04日
    瀏覽(51)
  • 在 ASP.NET Core Web API 中處理 Patch 請求

    PUT 和 PATCH 方法用于更新現(xiàn)有資源。 它們之間的區(qū)別是,PUT 會替換整個資源,而 PATCH 僅指定更改。 在 ASP.NET Core Web API 中,由于 C# 是一種靜態(tài)語言( dynamic 在此不表),當我們定義了一個類型用于接收 HTTP Patch 請求參數(shù)的時候,在 Action 中無法直接從實例中得知客戶端提供了哪

    2024年02月04日
    瀏覽(97)
  • 【服務器】ASP.Net Core(C#)創(chuàng)建Web站點

    【服務器】ASP.Net Core(C#)創(chuàng)建Web站點

    簡單幾步實現(xiàn)本地ASP.Net.Core web 站點結合cpolar內(nèi)網(wǎng)穿透工具實現(xiàn)遠程訪問 1. 創(chuàng)建站點 *環(huán)境搭建,這邊測試,使用.NET 6.0 SDK,可以點擊跳轉到官網(wǎng)下載,下載后安裝即可. 安裝完成后,進入到某個文件夾,打開powershell執(zhí)行下面命令,創(chuàng)建新的 Web 應用,名稱叫:aspnetcoreapp 2. 運行站點 信任開

    2024年02月11日
    瀏覽(24)
  • ASP.NET Core 的 Web Api 實現(xiàn)限流 中間件

    ASP.NET Core 的 Web Api 實現(xiàn)限流 中間件

    Microsoft.AspNetCore.RateLimiting ?中間件提供速率限制(限流)中間件。 它是.NET 7 以上版本才支持的中間件,剛看了一下,確實挺好用,下面給大家簡單介紹一下: RateLimiterOptionsExtensions?類提供下列用于限制速率的擴展方法:????? 固定窗口限制器 滑動窗口限制器 令牌桶限

    2024年01月17日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包