-
查看全部
-
全部筆記:
start up :項(xiàng)目運(yùn)行配置 管理依賴注入 中間間(configure-》Middelware) 以及處理請求通道(由IApplicationBuilder類創(chuàng) 建)
Program.cs-》
CreateDefaultDuilder(args)->1.加載主機(jī)和應(yīng)用得配置信息
2.配置日志記錄
3.設(shè)置web服務(wù)器
4.設(shè)置asp.net core的應(yīng)用形式
Asp.net MVC routing系統(tǒng)
?1.無需文件真正保存在硬盤上
2.訪問文件無需后綴
3.URL結(jié)構(gòu)與服務(wù)器文件夾結(jié)構(gòu)無關(guān)
4.url將會(huì)被映射給Controller控制器來處理請求,不會(huì)映射給靜態(tài)文件
http請求交給服務(wù)器-》controller來進(jìn)行活動(dòng) 之后再有controller響應(yīng)http請求
URL:{域名}/Controller/Action
具體信息又分段路由segments(自定義路由)來處理
URL:{域名}/Controller/Action/{id}->action 函數(shù)的參數(shù)來進(jìn)行頁面處理獲得數(shù)據(jù)輸出?
如何定義URL和Controller之間的映射規(guī)則?
默認(rèn)路由系統(tǒng)。 app.UseMvcWithDefaultRoute();
{域名}/{Controller=Home}/{Action=index}/{Value?}
自定義默認(rèn)路由:
使用中間件:
app.UseMvc(routes=>routes.MapRoute(name:"default",template:"{controller=Home}/{Action=index}/{Value?}"))
==app.UseMvcWithDefaultRoute();
在ASP.Net Mvc有兩種路由模式
1.傳統(tǒng)路由(使用路由表) Concentional routing
2.特性注釋路由 Attribute routing?
Conventional Routing?
1.URl 被分解為Controller和action兩個(gè)部分?
2.使用路由表(routing table )來設(shè)置路由規(guī)則
例如:rotes.MapRoute(name:"default",templete:"{controller=Home}/{action=index}")
Atrtibute Routing:
1.使用簡單,不再需要路由表,只要controller和action代碼中直接使用
attribute來定義路由
Example:
[Route("[controller]/[action]")]
public class HomeController:Controller
{
//get :/<controller>/
public Stirng Index()
{
return "Hello From Home";
}
}
路由中間件:幫助我們解析URL,并映射給相對應(yīng)得controller和action
?//
Attribute Routing :
可以幫助我們用AOP 面向面向切面得形式可以為每一個(gè)controller甚至action
單獨(dú)定義路由。Route("[controller]/[index]")
//
app.UseMvc(傳入lamda表達(dá)式來設(shè)定自定義路由)
什么是MVC:
1.軟件工程的架構(gòu)方式
2.模型,視圖和控制器
3.分離業(yè)務(wù)操作,數(shù)據(jù)顯示,邏輯控制?
視圖:用戶交互界面 展示輸入,不操作數(shù)據(jù),接受用戶數(shù)據(jù)
模型:MVC架構(gòu)得核心,表示業(yè)務(wù)模型或者數(shù)據(jù)模型,程序的業(yè)務(wù)邏輯。
如:算法的實(shí)現(xiàn),數(shù)據(jù)的管理,輸出對象的封裝等等
控制器:接受用戶得輸入,并調(diào)用模型和視圖去完成用戶的請求處理
本身不處理數(shù)據(jù)
三層架構(gòu):
UI層 BLL 業(yè)務(wù)邏輯層,處理核心業(yè)務(wù)以及數(shù)據(jù)封裝
DAL 表示數(shù)據(jù)訪問
三層架構(gòu)面向結(jié)構(gòu)編程,而三個(gè)層級(jí)之間的完全解耦,完全可替代
MVC得每個(gè)部分都是緊密結(jié)合的,它的核心并不是解耦,而是重用。
MVC的優(yōu)點(diǎn):
耦合性低
可復(fù)用性高
可維護(hù)性高
缺點(diǎn):
定義不明確,學(xué)習(xí)曲線陡
結(jié)構(gòu)復(fù)雜
數(shù)據(jù)流動(dòng)效率低
----控制器的工作原理--
Action 函數(shù):
處理請求
返回特殊樂星IActionResult
默認(rèn)http請求方式為Get
可接受url中的參數(shù)
Action:Post
如何處理POST請求:
[HttpPost]
public ActionResult Edit(int id,IFormCollection collection)
{
try
{
? return RedirectionToAction(nameof(Index));??
}
catch
{
? return View();
}
}
什么是模型?
1.其實(shí)是一個(gè)類 映射數(shù)據(jù)庫,對象化數(shù)據(jù)。
2.獲取數(shù)據(jù),更新數(shù)據(jù),傳遞數(shù)據(jù),保存數(shù)據(jù)等
3.處理業(yè)務(wù)邏輯,被視為BLL層
4.View Model與視圖數(shù)據(jù)綁定
不過,定義不明確,經(jīng)驗(yàn)很重要
可以是一個(gè)簡單的poco類 也可以是一復(fù)雜的充血性領(lǐng)域模型(rich Domain Model)
模型的業(yè)務(wù)邏輯:
函數(shù)方法等,不會(huì)映射數(shù)據(jù)庫,但會(huì)對數(shù)據(jù)進(jìn)行更新。
舉例:
模型屬性:
public int Id{get;set;}
public string FirstName{get;set;}
public string UserName{get;set;}
public string ShortDescription{get;set;}
public decimal Phone{get;set;}
public string Email{get;set;}
public bool IsEmailConfirm{get;set;}
業(yè)務(wù)邏輯:
public void ConfirmEmail(string token)
{
if(isTokenValid)
{
this.IsEmailConfirm=true;//save to database
}
}
數(shù)據(jù)持久化模式:repository倉庫模式
對象化數(shù)據(jù),不用管數(shù)據(jù)是怎么保存的
使用倉庫接口
舉例:
public interface INoodleRespositoy
{
? IEnumerable<Noodle> GetNoodles();
?Noodle GetNoodleById(int ID);
}
使用模型和數(shù)據(jù)倉庫的好處:
1.業(yè)務(wù)邏輯與數(shù)據(jù)模型緊密耦合,減少分層,降低代碼數(shù)量
2.完全剝離數(shù)據(jù)庫業(yè)務(wù),程序員可以更專注于實(shí)現(xiàn)業(yè)務(wù)邏輯
3.面向?qū)ο缶幊?,?shù)據(jù)轉(zhuǎn)化為對象,更符合程序員的思考方式
視圖模型 ViewModel
ViewModel中的數(shù)據(jù)會(huì)與UI界面雙向綁定,一旦ViewModel
中的數(shù)據(jù)發(fā)生任何變化,結(jié)果都會(huì)立即反應(yīng)在UI界面中。
特點(diǎn):
1.依然是模型
2.用視圖模型替代數(shù)據(jù)上下文
3.poco(plain old class object),不包含方法的簡單類
?MVVM:model-view-view Model
為什么要使用ViewModel
1.減少頁面邏輯的復(fù)雜度
2.處理頁面的數(shù)據(jù)邏輯,管理頁面狀態(tài)
3.各種組件也可以相對解耦,既有利于團(tuán)隊(duì)協(xié)作與日后維護(hù)
管理前端框架工具:
項(xiàng)目名稱(右擊)-》client-site Library-》libman
Asp.Net Core Identity?
1.Password Hashing?
2.Tokenization
3.TwoFacts Authentication
4.Authentication
5.Authorization
6.External Login 第三方驗(yàn)證?
查看全部 -
app.UseMvc(routes =>?
{?
routes.MapRoute(
? ? ? ? ? ? ? ? name: "defalut",
? ? ? ? ? ? ?template:"{controller=Home}/{action=Index}/{id?}"
==app.UseMvcWithDefaultRoute();
}
使用中間件或者映射默認(rèn)路由都可以
查看全部 -
。net core數(shù)據(jù)驗(yàn)證
查看全部 -
admin管理員路由限制
查看全部 -
阿房宮遺址位于廣東省東南部沿海的城市之一?查看全部
-
wwwroot文件夾存放前端靜態(tài)文件;如js、css、圖片、視頻
content,images,lib
2.iis只能運(yùn)行于windows平臺(tái)
Propertier-.json文件中配置端口信息
查看全部 -
1-2 asp.net core?
1.歷史:2016asp.net core 1.0,2018asp.net core 2.2
2.跨平臺(tái):windows,macos,linux,unix
3.性能:輕量級(jí),適合微服務(wù)架構(gòu),容器化,不向后兼容(1.0升2.0要重構(gòu),.net framwork換成.net core要重寫)
4.c#:.net framework的旗艦語言,語言集成查詢linq,異步構(gòu)造await async,支持函數(shù)式語
查看全部 -
1-1知識(shí)點(diǎn)
基礎(chǔ)知識(shí):.net core / 環(huán)境設(shè)置
asp mvc :mvc架構(gòu) / 路由系統(tǒng) / razor
entity framework:倉庫模式 / code first / 映射數(shù)據(jù) / crud
身份認(rèn)證:認(rèn)證 / 授權(quán)
查看全部 -
IEnumerable<T>?是?System.Collections.Generic?命名空間中的集合的基接口,如?List<T>、Dictionary<TKey,TValue>和?Stack<T>?以及其他泛型集合,如?ObservableCollection<T>?和?ConcurrentStack<T>。?可以通過使用?
foreach
?語句來枚舉實(shí)現(xiàn)?IEnumerable<T>?的集合。查看全部 -
ps:oop面向?qū)ο缶幊?/p>
aop面向切面編程 可以通過預(yù)編譯方式和運(yùn)行期動(dòng)態(tài)代理實(shí)現(xiàn)在不修改源代碼的情況下給程序動(dòng)態(tài)統(tǒng)一添加功能的一種技術(shù)。
面向切面編程是面向?qū)ο缶幊痰囊粋€(gè)強(qiáng)大的補(bǔ)充
通過切面可以把分散在應(yīng)用各處的行為放入可重用的模塊中
通過注解顯示的聲明在什么地方應(yīng)用該行為
有效減少冗余代碼,讓我們的類關(guān)注自身的主要功能
動(dòng)態(tài)代理模式和靜態(tài)代理模式
通過使用@Aspect注解和簡單的配置,可以很簡單的在Spring中裝配advice和pointcut
作者:Jason2Young
鏈接:https://www.jianshu.com/p/be6cb39dbeb7
來源:簡書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。查看全部 -
公用導(dǎo)航欄設(shè)置
查看全部 -
ViewModel組合數(shù)據(jù)
查看全部 -
數(shù)據(jù)倉庫逐個(gè)注入
查看全部 -
依賴注入
倉庫注冊services.AddTransient<INoodleRepository,MockNoodleResposity>();//每次發(fā)起請求后創(chuàng)建一個(gè)全新的倉庫,請求結(jié)束后自動(dòng)注銷這個(gè)倉庫
services.AddSingleton;//系統(tǒng)啟動(dòng)有且僅創(chuàng)建一個(gè)倉庫,系統(tǒng)每次請求使用同一個(gè)倉庫實(shí)例
services.AddScoped;//將一系列請求或操作整合在一個(gè)事務(wù)里,這個(gè)事務(wù)有且僅創(chuàng)建一個(gè)實(shí)例,事務(wù)結(jié)束后會(huì)自動(dòng)注銷這個(gè)實(shí)例
查看全部
舉報(bào)