1. 程式人生 > >解讀ASP.NET 5 & MVC6系列(17):MVC中的其他新特性

解讀ASP.NET 5 & MVC6系列(17):MVC中的其他新特性

(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"

上述程式碼表示,引用BookStoreMicrosoft.Framework.OptionsModel名稱空間,以及Microsoft.AspNet.Mvc.TagHelpers程式集下的所有名稱空間。

關於addTagHelper功能,我們已經在TagHelper中講解過了

注意,在本例中,我們只引用了BookStore名稱空間,並沒有引用BookStore.Controllers名稱空間,所以我們在任何檢視中,都無法訪問HomeController類(也不能以Controllers.HomeController的形式進行訪問),希望微軟以後能加以改進。

獲取IP相關資訊

要獲取使用者訪問者的IP地址相關資訊,可以利用依賴注入,獲取IHttpConnectionFeature

的例項,從該例項上可以獲取IP地址的相關資訊,例項如下:

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埠

類似地,你也可以通過IHttpRequestFeatureIHttpResponseFeatureIHttpClientCertificateFeatureIWebSocketAcceptContext等介面,獲取相關的例項,從而使用該例項上的特性,上述介面都在名稱空間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
}

同步與推薦