環境:vs2017 版本:15.5.6 這裡說明下, Razor頁面模式跟mvc出現了嚴重的不同。正如微軟官方說的一樣“Razor 頁面是 ASP.NET Core MVC 的一個新功能,它可以使基於頁面的編碼方式更簡單高效。” 但就代碼說沒有什麼不同幾乎完全一樣,但是存放的位置卻有了根本的區別。個 ...
環境:vs2017 版本:15.5.6
這裡說明下, Razor頁面模式跟mvc出現了嚴重的不同。正如微軟官方說的一樣“Razor 頁面是 ASP.NET Core MVC 的一個新功能,它可以使基於頁面的編碼方式更簡單高效。”
但就代碼說沒有什麼不同幾乎完全一樣,但是存放的位置卻有了根本的區別。個人研究分析的結果是:Razor頁面模式其實是把mvc中的控制器化整為零了,即原來控制器中的操作代碼被分佈放到了各個頁面的.cshtml.cs文件中了。這樣一來由原來mvc中文件按類型分類變成了按功能分類,這樣的好處就是每個頁面形成了模塊化,這個頁面涉及的數據都在這裡,便於維護,不用控制器、模型、視圖來回切換了,給我的感覺多少有些像原來的web窗體的頁面結構,當然化整為零後每個頁面的操作不用全部去讀取控制器,可能在性能有提升。
同時,這種變化使代碼功能單一,易於維護,更不易出現錯誤,所以還是值得一學的。
另外就是,因為本人經常開發一些小的項目,基本用不到sql服務,加之經常切換伺服器,所以為了管理方便,資料庫文件基本採用離線資料庫文件(即伺服器不用安裝sqlserver即可使用)。如遇使用sqlserver朋友此章可以跳過,因為你不做修改,系統預設是sqlserver服務。(測試生成的資料庫好像是在c盤的“文檔”里?記不清了。)
一、新建項目
1、文件》新建》項目》Visual c#》.NET Core》ASP.NET Core Web應用程式(“.NET Framework” 4.6.1)
2、依次選擇“.NET Core”》“ASP.NET Core 2.0”,然後選擇“Web 應用程式”(身份驗證類型:個人用戶賬戶)。
二、修改資料庫連接。引自“張不水”兄的研究成果。
1、相對路徑:
修改appsettings.json文件中的"ConnectionStrings"(第3行)
"DefaultConnection": "Data Source=(localdb)\\mssqllocaldb;AttachDbFilename=%CONTENTROOTPATH%\\App_Data\\aspnet123.mdf;Integrated Security=True;Connect Timeout=30;MultipleActiveResultSets=true”
需註意的是:AttachDbFilename=%CONTENTROOTPATH%\\App_Data\\aspnet123.mdf;
使用 ContentRootPath 是將文件放置在項目目錄下而不是wwwroot目錄下,這樣更安全。
ContentRootPath 用於包含應用程式文件。
WebRootPath 用於包含Web服務性的內容文件。
實際使用區別如下:
ContentRoot: C:\MyApp\
WebRoot: C:\MyApp\wwwroot\
2、修改Startup.cs
修改後的代碼:
①修改Startup方法為如下
public Startup(IConfiguration configuration,IHostingEnvironment env) { Configuration = configuration;
//新添加 _env = env; }
②添加public IHostingEnvironment _env { get; }
③修改ConfigureServices方法
註銷掉原有的services.AddDbContext
//添加修改()聲明變數conn並做相應處理
string conn = Configuration.GetConnectionString("DefaultConnection");
if (conn.Contains("%CONTENTROOTPATH%"))
{
conn = conn.Replace("%CONTENTROOTPATH%", _env.ContentRootPath);
}
//修改預設的連接服務為conn
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(conn));
修改完成後的代碼:
public class Startup { public Startup(IConfiguration configuration, IHostingEnvironment env) { Configuration = configuration; //新添加 _env = env; } public IConfiguration Configuration { get; } //新添加 public IHostingEnvironment _env { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { //services.AddDbContext<ApplicationDbContext>(options => // options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); //添加修改()聲明變數conn並做相應處理 string conn = Configuration.GetConnectionString("DefaultConnection"); if (conn.Contains("%CONTENTROOTPATH%")) { conn = conn.Replace("%CONTENTROOTPATH%", _env.ContentRootPath); } //修改預設的連接服務為conn services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(conn)); services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); // Add application services. services.AddTransient<IEmailSender, EmailSender>(); services.AddMvc(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseAuthentication(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } }View Code
3、手動在項目中添加“App_data”文件夾,並複製粘貼一個標準的內容為空的.mdf文件。
為方便大家學習我這裡為大家提供了示例資料庫。