解讀ASP.NET 5 & MVC6系列教程(17):MVC中的其他新特性
(GlobalImport全局導(dǎo)入功能)
默認(rèn)新建立的MVC程序中,在Views目錄下,新增加了一個(gè)_GlobalImport.cshtml
文件和_ViewStart.cshtml
平級,該文件的功能類似于之前Views目錄下的web.config文件,之前我們在該文件中經(jīng)常設(shè)置全局導(dǎo)入的命名空間,以避免在每個(gè)view文件中重復(fù)使用@using xx.xx
語句。
默認(rèn)的示例如下:
@using BookStore @using Microsoft.Framework.OptionsModel @addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
上述代碼表示,引用BookStore
和Microsoft.Framework.OptionsModel
命名空間,以及Microsoft.AspNet.Mvc.TagHelpers
程序集下的所有命名空間。
關(guān)于addTagHelper功能,我們已經(jīng)在TagHelper中講解過了
注意,在本例中,我們只引用了BookStore
命名空間,并沒有引用BookStore.Controllers
命名空間,所以我們在任何視圖中,都無法訪問HomeController
類(也不能以Controllers.HomeController
的形式進(jìn)行訪問),希望微軟以后能加以改進(jìn)。
獲取IP相關(guān)信息
要獲取用戶訪問者的IP地址相關(guān)信息,可以利用依賴注入,獲取IHttpConnectionFeature
的實(shí)例,從該實(shí)例上可以獲取IP地址的相關(guān)信息,實(shí)例如下:
var connection1 = Request.HttpContext.GetFeature<IHttpConnectionFeature>(); var connection2 = Context.GetFeature<IHttpConnectionFeature>(); var isLocal = connection1.IsLocal; //是否本地IP var localIpAddress = connection1.LocalIpAddress; //本地IP地址 var localPort = connection1.LocalPort; //本地IP端口 var remoteIpAddress = connection1.RemoteIpAddress; //遠(yuǎn)程IP地址 var remotePort = connection1.RemotePort; //本地IP端口
類似地,你也可以通過IHttpRequestFeature
、IHttpResponseFeature
、IHttpClientCertificateFeature
、 IWebSocketAcceptContext
等接口,獲取相關(guān)的實(shí)例,從而使用該實(shí)例上的特性,上述接口都在命名空間Microsoft.AspNet.HttpFeature
的下面。
文件上傳
MVC6在文件上傳方面,給了新的改進(jìn)處理,舉例如下:
<form method="post" enctype="multipart/form-data"> <input type="file" name="files" id="files" multiple /> <input type="submit" value="submit" /> </form>
我們在前端頁面定義上述上傳表單,在接收可以使用MVC6中的新文件類型IFormFile
,實(shí)例如下:
[HttpPost] public async Task<IActionResult> Index(IList<IFormFile> files) { foreach (var file in files) { var fileName = ContentDispositionHeaderValue .Parse(file.ContentDisposition) .FileName .Trim('"');// beta3版本的bug,F(xiàn)ileName返回的字符串包含雙引號,如"fileName.ext" if (fileName.EndsWith(".txt"))// 只保存txt文件 { var filePath = _hostingEnvironment.ApplicationBasePath + "\\wwwroot\\"+ fileName; await file.SaveAsAsync(filePath); } } return RedirectToAction("Index");// PRG }
相關(guān)文章
在ASP.NET 2.0中操作數(shù)據(jù)之六十五:在TableAdapters中創(chuàng)建新的存儲過程
本文主要講解使用TableAdapter設(shè)置向?qū)ё詣?dòng)創(chuàng)建增刪改查的存儲過程,雖然自動(dòng)創(chuàng)建存儲過程可以節(jié)省時(shí)間,但他們會包含一些無用的參數(shù),下節(jié)我們會介紹TableAdapter使用現(xiàn)有的存儲過程。2016-05-05NopCommerce架構(gòu)分析之(六)自定義RazorViewEngine和WebViewPage
本文對NopCommerce的后臺分離技術(shù)做簡單的探討。NopCommerce通過自定義視圖引擎,重寫了VirtualPathProviderViewEngine類的CreateView、CreatePartialView、FindView、FindPartialView方法,添加自定義的視圖搜索路徑來實(shí)現(xiàn)后臺分離。2016-04-04在ASP.NET 2.0中操作數(shù)據(jù)之四:使用ObjectDataSource展現(xiàn)數(shù)據(jù)
前面介紹搭建基礎(chǔ)的架構(gòu),下面我們來介紹ASP.NET中,如何利用ObjectDataSource來展現(xiàn)數(shù)據(jù)。通過配置ObjectDataSource,我們指定這些底層的對象,還有這些對象的方法如何映射到ObjectDataSource的Select、Insert、Update和Delete方法。2016-04-04寫給初學(xué)asp.net的新人們 新手學(xué)習(xí)經(jīng)驗(yàn)
IT=挨踢,這是IT人的自嘲,進(jìn)入IT行業(yè)是有四五年了,也算得上是一個(gè)“老人”了吧,見了不少新人,面試了不少新人,也帶了一些新人,多多少少還是有點(diǎn)發(fā)言權(quán)的。2010-05-05NopCommerce架構(gòu)分析之(三)EntityFramework數(shù)據(jù)庫初試化及數(shù)據(jù)操作
本文介紹IStartupTask,該類會在系統(tǒng)啟動(dòng)時(shí)執(zhí)行,IStartupTask調(diào)用IEfDataProvider進(jìn)行數(shù)據(jù)庫的初始化。2016-04-04在ASP.NET 2.0中操作數(shù)據(jù)之五十一:從GridView的頁腳插入新記錄
本文介紹在ASP.NET 2.0中如何在GridView的頁腳動(dòng)態(tài)插入一行新記錄,要顯示頁腳行只需要設(shè)置ShowFooter屬性為true。我們可以這樣對頁腳行進(jìn)行用戶定制:將每一列轉(zhuǎn)換成TemplateField,并在其FooterTemplate模板定制插入界面。2016-05-05