解读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
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索5
, asp.net
, ip
, 文件上传
, mvc6
, 新特性
GlobalImport
,以便于您获取更多的相关知识。

时间: 2024-11-25 23:19:38

解读ASP.NET 5 & MVC6系列教程(17):MVC中的其他新特性_自学过程的相关文章

解读ASP.NET 5 &amp; MVC6系列教程(6):Middleware详解_自学过程

在第1章项目结构分析中,我们提到Startup.cs作为整个程序的入口点,等同于传统的Global.asax文件,即:用于初始化系统级的信息(例如,MVC中的路由配置).本章我们就来一一分析,在这里如何初始化这些系统级的信息. 新旧版本之间的Pipeline区别 ASP.NET 5和之前版本的最大区别是对HTTP Pipeline的全新重写,在之前的版本中,请求过滤器的通常是以HttpModule为模块组件,这些组件针对HttpApplication里定义的各个周期内的事件进行响应,从而用于实现

解读ASP.NET 5 &amp; MVC6系列教程(5):Configuration配置信息管理_自学过程

在前面的章节中,我们知道新版的MVC程序抛弃了原来的web.config文件机制,取而代替的是config.json,今天我们就来深入研究一下配置文件的相关内容. 基本用法 新版的配置信息机制在Microsoft.Framework.ConfigurationModel命名空间下进行了重写,重写以后不仅支持XML格式,还支持json.ini.环境变量等.在模板示例程序中Startup类的构造函数内如,有如下语句: // Setup configuration sources. Configura

解读ASP.NET 5 &amp; MVC6系列教程(7):依赖注入_自学过程

在前面的章节(Middleware章节)中,我们提到了依赖注入功能(Dependency Injection),ASP.NET 5正式将依赖注入进行了全功能的实现,以便开发人员能够开发更具弹性的组件程序,MVC6也利用了依赖注入的功能重新对Controller和View的服务注入功能进行了重新设计:未来的依赖注入功能还可能提供更多的API,所有如果还没有开始接触依赖注入的话,就得好好学一下了. 在之前版本的依赖注入功能里,依赖注入的入口有MVC中的IControllerFactory和Web A

解读ASP.NET 5 &amp; MVC6系列教程(1):ASP.NET 5简介_自学过程

ASP.NET 5简介 ASP.NET 5是一个跨时代的改写,所有的功能和模块都进行了独立拆分,做到了彻底解耦.为了这些改写,微软也是蛮 拼的,几乎把.NET Framwrok全部改写了一遍,形成了一个.NET Core的东西. 在.NET Core里一切都是可配置的,包括Session.MVC等功能,而一切可配置的功能都是可以在Nuget上进行下载. 目前ASP.NET 5依旧兼容老的.NET Framwrok,但要在进行跨平台的部署,还是只能使用新改版的.NET Core CLR. 目前的A

解读ASP.NET 5 &amp; MVC6系列教程(11):Routing路由_自学过程

新版Routing功能介绍 在ASP.NET 5和MVC6中,Routing功能被全部重写了,虽然用法有些类似,但和之前的Routing原理完全不太一样了,该Routing框架不仅可以支持MVC和Web API,还支持一般的ASP.NET5程序.新版的改变有如下几个部分. 首先,Routing系统是基于ASP.NET 5的,是一个独立于MVC的路由框架,而不是基于MVC的.MVC只是在上面扩展了一个快捷方式而已. 其次,在ASP.NET 5中,MVC和Web API控制器没有区别了,即合二为一了

解读ASP.NET 5 &amp; MVC6系列教程(12):基于Lamda表达式的强类型Routing实现_自学过程

前面的深入理解Routing章节,我们讲到了在MVC中,除了使用默认的ASP.NET 5的路由注册方式,还可以使用基于Attribute的特性(Route和HttpXXX系列方法)来定义.本章,我们将讲述一种基于Lambda表达式的强类型类型. 这种方式的基本使用示例如下: services.Configure<MvcOptions>(opt => { opt.EnableTypedRouting(); opt.GetRoute("homepage", c =>

解读ASP.NET 5 &amp; MVC6系列教程(13):TagHelper_自学过程

在新版的MVC6中,微软提供了强大的TagHelper功能,以便让我们摆脱如下的臃肿代码: @Html.LabelFor(model => model.FullName) @Html.EditFor(model => model.FullName) @Html.ValidationMessageFor(model => model.FullName) 引入新功能TagHelper以后,我们只需要这样定义就可以了,代码如下: @addTagHelper "*, Microsoft

解读ASP.NET 5 &amp; MVC6系列教程(16):自定义View视图文件查找逻辑_自学过程

之前MVC5和之前的版本中,我们要想对View文件的路径进行控制的话,则必须要对IViewEngine接口的FindPartialView或FindView方法进行重写,所有的视图引擎都继承于该IViewEngine接口,比如默认的RazorViewEngine.但新版本MVC6中,对视图文件的路径方式却不太一样了,目前有两种方式,一种是通过RazorViewEngine,另外一种是通过新特性IViewLocationExpander接口. 通过RazorViewEngine来控制View路径

解读ASP.NET 5 &amp; MVC6系列教程(15):MvcOptions配置_自学过程

程序模型处理 IApplicationModelConvention 在MvcOptions的实例对象上,有一个ApplicationModelConventions属性(类型是:List<IApplicationModelConvention>),该属性IApplicationModelConvention类型的接口集合,用于处理应用模型ApplicationModel,该集合是在MVC程序启动的时候进行调用,所以在调用之前,我们可以对其进行修改或更新,比如,我们可以针对所有的Control