這是一個新的系列,名字是《ASP.NET Core 入門到實戰》。這個系列主講ASP.NET Core MVC,輔助一些前端的基礎知識(能用來實現咱們須要的便可,並不是主講)。同時這個系列也會在後續介紹ASP.NET Core 平臺的其它類型的項目,並帶領你們以各個類型的項目爲主要架構開發一個網站或者網絡服務中心。css
下圖是官網關於Asp.net Core支持的項目的介紹html
這一節我將爲你們介紹一下 asp.net core的發展歷程。前端
最先,微軟爲了替代CGI腳本開發了asp應用。ASP 全程 Active Server Page,意思是活動的服務器網頁。ASP是一種HTML+服務器代碼的組合,其後綴是.asp 。jquery
在2001年,微軟宣佈將asp遷移到.NET Framework上,造成了一種新的腳本語言——名爲asp.net。在2002年發佈初版,名爲ASP.NET 1.0,附屬在.NET Framework 1.0 上。ASP.NET 不只僅是asp + ,更是 asp + .net 。結合了.net以後的asp.net 更增強大。ios
在2008年以前的某一年,asp.net mvc 上線了。今後以後,asp.net 分爲了兩種技術:asp.net webform(也就是原有的asp.net);asp.net mvc。MVC極大的減小了在前臺頁面中設置大量的服務器腳本,同時MVC更貼近與HTML語言,使得程序開發工程師和前端能更好的配合 。web
在2016年,微軟爲了實現本身的跨平臺戰略,將.NET Framework提取出了.NET Core版本,同年發佈1.0版本。與此同時發佈了asp.net core RTM版,正式版發佈於2017年。json
今後.net core帶着它的小夥伴 EF Core和ASP.NET Core一路高歌猛進,而後發展成了現在的現狀。bootstrap
固然,以上內容省略了大量的情節,有興趣的小夥伴能夠自行查閱相關資料。這裏就不作過多的介紹了,由於篇幅太長了,並且也會偏離主線。瀏覽器
那麼,爲何咱們選擇了ASP.NET Core呢?目前市面上還有不少行業系統和領域相關係統都使用着 ASP.NET Webform,市場佔比依舊不小。可是咱們要考慮一件事情,那就是先行者優點和彎道超車。服務器
如今的狀況是,老的技術市場已經站滿了人,新的技術市場還空空如也(固然,在我發這篇文章的時候---2020-5-29---asp.net core已經不算新了)。若是想入場一個技術,那麼最適合的就是學最新的。
再者,ASP.NET Core支持跨平臺。最先.net是不支持跨平臺的,後來是Mono 通過努力讓.net 開始支持跨平臺。後來微軟提出了跨平臺戰略和物聯網戰略,才提出正式的跨平臺實現。
那麼,我想到這裏理由仍是比較充分了。
MVC也就是Model-View-Controller的簡稱,意思是模型-視圖-控制器。它的通訊流程是這樣的:
用戶訪問界面(View),提交請求(包括訪問請求)
界面向控制器(Controller)轉送用戶的請求,並進行必定程度封裝
控制器(Controller)處理並完成後,以Model的形式返回給View
View解析返回的Model,而後繪製界面展現給用戶
MVC下降了頁面和控制器的耦合,簡單的講就是極大的減小了頁面上的服務器腳本。另外,加強了頁面複用。ASP.NET Core MVC 在這一方便進一步優化了,又減小了不符合HTML格式的標籤。
固然,MVC還有更多的好處。不過,最主要的一點就是,MVC可讓你離那些大佬更近一步(意思就是能讓你得到一個工做)。
在上一節,我胡扯了一堆,說不定打消了不少人的興趣,哈哈,開個玩笑。讓咱們正式開始來試試ASP.NET Core。
先建立一個解決方案:
dotnet new sln --name AspDemo
建立一個MVC項目而後加入到解決方案
dotnet new mvc --name MvcWeb
dotnet sln add MvcWeb
這時候,若是不出意外的話,你能在AspDemo目錄下看到以下目錄結構:
├── AspCoreDemo.sln
└── MvcWeb
├── appsettings.Development.json
├── appsettings.json
├── Controllers
│ └── HomeController.cs
├── Models
│ └── ErrorViewModel.cs
├── MvcWeb.csproj
├── obj
│ ├── MvcWeb.csproj.nuget.dgspec.json
│ ├── MvcWeb.csproj.nuget.g.props
│ ├── MvcWeb.csproj.nuget.g.targets
│ ├── project.assets.json
│ └── project.nuget.cache
├── Program.cs
├── Properties
│ └── launchSettings.json
├── Startup.cs
├── Views
│ ├── Home
│ │ ├── Index.cshtml
│ │ └── Privacy.cshtml
│ ├── Shared
│ │ ├── Error.cshtml
│ │ ├── _Layout.cshtml
│ │ └── _ValidationScriptsPartial.cshtml
│ ├── _ViewImports.cshtml
│ └── _ViewStart.cshtml
└── wwwroot
├── css
│ └── site.css
├── favicon.ico
├── js
│ └── site.js
└── lib
├── bootstrap
│ ├── dist
│ │ ├── css
│ │ │ ├── bootstrap.css
│ │ │ ├── bootstrap.css.map
│ │ │ ├── bootstrap-grid.css
│ │ │ ├── bootstrap-grid.css.map
│ │ │ ├── bootstrap-grid.min.css
│ │ │ ├── bootstrap-grid.min.css.map
│ │ │ ├── bootstrap.min.css
│ │ │ ├── bootstrap.min.css.map
│ │ │ ├── bootstrap-reboot.css
│ │ │ ├── bootstrap-reboot.css.map
│ │ │ ├── bootstrap-reboot.min.css
│ │ │ └── bootstrap-reboot.min.css.map
│ │ └── js
│ │ ├── bootstrap.bundle.js
│ │ ├── bootstrap.bundle.js.map
│ │ ├── bootstrap.bundle.min.js
│ │ ├── bootstrap.bundle.min.js.map
│ │ ├── bootstrap.js
│ │ ├── bootstrap.js.map
│ │ ├── bootstrap.min.js
│ │ └── bootstrap.min.js.map
│ └── LICENSE
├── jquery
│ ├── dist
│ │ ├── jquery.js
│ │ ├── jquery.min.js
│ │ └── jquery.min.map
│ └── LICENSE.txt
├── jquery-validation
│ ├── dist
│ │ ├── additional-methods.js
│ │ ├── additional-methods.min.js
│ │ ├── jquery.validate.js
│ │ └── jquery.validate.min.js
│ └── LICENSE.md
└── jquery-validation-unobtrusive
├── jquery.validate.unobtrusive.js
├── jquery.validate.unobtrusive.min.js
└── LICENSE.txt
簡單介紹一下MvcWeb項目中的幾個目錄:
Controllers 裏存放着控制器,負責處理視圖回傳的數據
Models 裏存放着Model層代碼,目錄名稱不強求,也不必定非要在這裏
Views 存放着視圖路徑,這個是固定名稱
wwwroot 用來存放一些js腳本和css樣式表
obj 目錄是編譯生成的目錄,暫時不用過多的關心。
那麼,接下來運行一下這個項目看看效果:
cd MvcWeb
dotnet run
# 或者
dotnet run --porject MvcWeb
若是出現以下內容表示項目已經啓動完成了:
而後在瀏覽器中輸入:
http://localhost:5000
而後就能看到以下內容:
目前是一個空蕩蕩的項目,不要急,在這個系列以後的文章中咱們會繼續豐富這個項目,讓它的內容更加豐富更加符合咱們的須要。
有沒有以爲這個名字很熟悉?沒錯,咱們以前每次演示使用的都是控制檯程序,就有一個Program.cs文件,裏面有一個Main方法。咱們知道,Main方法是一個程序的入口。以前的Asp.net項目並無這個方法,是由於以前的項目都是依託在IIS上。而asp.net core脫離了IIS,使其能夠直接運行,因此就有一個入口方法。
代碼應當以下:
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
在咱們使用的時候,常常會出現端口被佔用的狀況,這時候就須要咱們設置一下端口了。設置方法以下:
webBuilder.UseUrls("http://*:5006");
而後重啓項目,就能夠發現端口已經發生改變。
這個類用來配置服務和應用的請求管道。這是一個約定的名稱。初始版本的類文件應該是這樣的:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
這一篇簡單的帶領你們一塊兒看了下asp.net core MVC項目。能夠說這是最能體現微軟的約定優於配置這句話的項目。MVC項目配置、繼承都不多。全部的方法和類都是經過約定好的名稱和參數列表來區分。因此在開發MVC項目時候,發現效果和預期不太一致的時候,看一下是否是有拼寫錯誤。