解讀ASP.NET 5 & MVC6系列(17):MVC中的其他新特性
阿新 • • 發佈:2018-12-27
(GlobalImport全域性匯入功能)
預設新建立的MVC程式中,在Views目錄下,新增加了一個_GlobalImport.cshtml
檔案和_ViewStart.cshtml
平級,該檔案的功能類似於之前Views目錄下的web.config檔案,之前我們在該檔案中經常設定全域性匯入的名稱空間,以避免在每個view檔案中重複使用@using xx.xx
語句。
預設的示例如下:
@using BookStore @using Microsoft.Framework.OptionsModel @addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
上述程式碼表示,引用BookStore
和Microsoft.Framework.OptionsModel
名稱空間,以及Microsoft.AspNet.Mvc.TagHelpers
程式集下的所有名稱空間。
關於addTagHelper功能,我們已經在TagHelper中講解過了
注意,在本例中,我們只引用了BookStore
名稱空間,並沒有引用BookStore.Controllers
名稱空間,所以我們在任何檢視中,都無法訪問HomeController
類(也不能以Controllers.HomeController
的形式進行訪問),希望微軟以後能加以改進。
獲取IP相關資訊
要獲取使用者訪問者的IP地址相關資訊,可以利用依賴注入,獲取IHttpConnectionFeature
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; //遠端IP地址 var remotePort = connection1.RemotePort; //本地IP埠
類似地,你也可以通過IHttpRequestFeature
、IHttpResponseFeature
、IHttpClientCertificateFeature
、 IWebSocketAcceptContext
等介面,獲取相關的例項,從而使用該例項上的特性,上述介面都在名稱空間Microsoft.AspNet.HttpFeature
的下面。
檔案上傳
MVC6在檔案上傳方面,給了新的改進處理,舉例如下:
<form method="post" enctype="multipart/form-data">
<input type="file" name="files" id="files" multiple />
<input type="submit" value="submit" />
</form>
我們在前端頁面定義上述上傳表單,在接收可以使用MVC6中的新檔案型別IFormFile
,例項如下:
[HttpPost]
public async Task<IActionResult> Index(IList<IFormFile> files)
{
foreach (var file in files)
{
var fileName = ContentDispositionHeaderValue
.Parse(file.ContentDisposition)
.FileName
.Trim('"');// beta3版本的bug,FileName返回的字串包含雙引號,如"fileName.ext"
if (fileName.EndsWith(".txt"))// 只儲存txt檔案
{
var filePath = _hostingEnvironment.ApplicationBasePath + "\\wwwroot\\"+ fileName;
await file.SaveAsAsync(filePath);
}
}
return RedirectToAction("Index");// PRG
}