解读ASP.NET 5 & MVC6系列教程(17):MVC中的其他新特性
(GlobalImport全局导入功能)
默认新建立的MVC程序中,在Views目录下,新增加了一个_GlobalImport.cshtml文件和_ViewStart.cshtml平级,该文件的功能类似于之前Views目录下的web.config文件,之前我们在该文件中经常设置全局导入的命名空间,以避免在每个view文件中重复使用@usingxx.xx语句。
默认的示例如下:
@usingBookStore @usingMicrosoft.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的实例,从该实例上可以获取IP地址的相关信息,实例如下:
varconnection1=Request.HttpContext.GetFeature<IHttpConnectionFeature>(); varconnection2=Context.GetFeature<IHttpConnectionFeature>(); varisLocal=connection1.IsLocal;//是否本地IP varlocalIpAddress=connection1.LocalIpAddress;//本地IP地址 varlocalPort=connection1.LocalPort;//本地IP端口 varremoteIpAddress=connection1.RemoteIpAddress;//远程IP地址 varremotePort=connection1.RemotePort;//本地IP端口
类似地,你也可以通过IHttpRequestFeature、IHttpResponseFeature、IHttpClientCertificateFeature、IWebSocketAcceptContext等接口,获取相关的实例,从而使用该实例上的特性,上述接口都在命名空间Microsoft.AspNet.HttpFeature的下面。
文件上传
MVC6在文件上传方面,给了新的改进处理,举例如下:
<formmethod="post"enctype="multipart/form-data"> <inputtype="file"name="files"id="files"multiple/> <inputtype="submit"value="submit"/> </form>
我们在前端页面定义上述上传表单,在接收可以使用MVC6中的新文件类型IFormFile,实例如下:
[HttpPost] publicasyncTask<IActionResult>Index(IList<IFormFile>files) { foreach(varfileinfiles) { varfileName=ContentDispositionHeaderValue .Parse(file.ContentDisposition) .FileName .Trim('"');//beta3版本的bug,FileName返回的字符串包含双引号,如"fileName.ext" if(fileName.EndsWith(".txt"))//只保存txt文件 { varfilePath=_hostingEnvironment.ApplicationBasePath+"\\wwwroot\\"+fileName; awaitfile.SaveAsAsync(filePath); } } returnRedirectToAction("Index");//PRG }