代码改变世界

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

2015-06-03 09:22 by 汤姆大叔, 阅读(20254) 阅读, 推荐(19) 推荐, 收藏, 编辑

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

同步与推荐

本文已同步至目录索引:解读ASP.NET 5 & MVC6系列

解读ASP.NET 5 & MVC6系列(16):自定义View视图文件查找逻辑

2015-06-02 09:07 by 汤姆大叔, 阅读(12429) 阅读, 推荐(14) 推荐, 收藏, 编辑
摘要:之前MVC5和之前的版本中,我们要想对View文件的路径进行控制的话,则必须要对`IViewEngine`接口的`FindPartialView`或`FindView`方法进行重写,所有的视图引擎都继承于该`IViewEngine`接口,比如默认的`RazorViewEngine`。但新版本MVC6... 阅读全文

解读ASP.NET 5 & MVC6系列(15):MvcOptions配置

2015-06-01 08:58 by 汤姆大叔, 阅读(8860) 阅读, 推荐(4) 推荐, 收藏, 编辑
摘要:#程序模型处理 IApplicationModelConvention在`MvcOptions`的实例对象上,有一个`ApplicationModelConventions`属性(类型是:`List`),该属性`IApplicationModelConvention`类型的接口集合,用于处理应用模型... 阅读全文

解读ASP.NET 5 & MVC6系列(14):View Component

2015-05-29 09:18 by 汤姆大叔, 阅读(12297) 阅读, 推荐(11) 推荐, 收藏, 编辑
摘要:在之前的MVC中,我们经常需要类似一种小部件的功能,通常我们都是使用Partial View来实现,因为MVC中没有类似Web Forms中的WebControl的功能。但在MVC6中,这一功能得到了极大的改善。新版MVC6中,提供了一种叫做View Component的功能。你可以将View Co... 阅读全文

解读ASP.NET 5 & MVC6系列(13):TagHelper

2015-05-28 09:22 by 汤姆大叔, 阅读(15181) 阅读, 推荐(22) 推荐, 收藏, 编辑
摘要:在新版的MVC6中,微软提供了强大的TagHelper功能,以便让我们摆脱如下的臃肿代码:```csharp@Html.LabelFor(model => model.FullName)@Html.EditFor(model => model.FullName)@Html.ValidationMes... 阅读全文

解读ASP.NET 5 & MVC6系列(12):基于Lamda表达式的强类型Routing实现

2015-05-27 09:05 by 汤姆大叔, 阅读(8370) 阅读, 推荐(11) 推荐, 收藏, 编辑
摘要:前面的深入理解Routing章节,我们讲到了在MVC中,除了使用默认的ASP.NET 5的路由注册方式,还可以使用基于Attribute的特性(Route和HttpXXX系列方法)来定义。本章,我们将讲述一种基于Lambda表达式的强类型类型。这种方式的基本使用示例如下:```csharpservi... 阅读全文

解读ASP.NET 5 & MVC6系列(11):Routing路由

2015-05-26 09:07 by 汤姆大叔, 阅读(20486) 阅读, 推荐(24) 推荐, 收藏, 编辑
摘要:#新版Routing功能介绍在ASP.NET 5和MVC6中,Routing功能被全部重写了,虽然用法有些类似,但和之前的Routing原理完全不太一样了,该Routing框架不仅可以支持MVC和Web API,还支持一般的ASP.NET5程序。新版的改变有如下几个部分。首先,Routing系统是基... 阅读全文

解读ASP.NET 5 & MVC6系列(10):Controller与Action

2015-05-25 09:11 by 汤姆大叔, 阅读(15894) 阅读, 推荐(14) 推荐, 收藏, 编辑
摘要:我们知道在MVC5和之前的版本,两个框架的生命周期是不一样的,在新版MVC6中,MVC Controller/Web API Controller已经合二为一了,本章我们主要讲解Controller和Action的定义与使用,以及在MVC框架中,如何根据路由查询相应的Controller和Actio... 阅读全文

解读ASP.NET 5 & MVC6系列(9):日志框架

2015-05-22 09:00 by 汤姆大叔, 阅读(19301) 阅读, 推荐(31) 推荐, 收藏, 编辑
摘要:#框架介绍在之前的.NET中,微软还没有提供过像样的日志框架,目前能用的一些框架比如Log4Net、NLog、CommonLogging使用起来多多少少都有些费劲,和java的SLF4J根本无法相比。但在新版的ASP.NET5中,可谓是牛气冲天,微软提供的Microsoft.Framework.Lo... 阅读全文

解读ASP.NET 5 & MVC6系列(8):Session与Caching

2015-05-21 09:08 by 汤姆大叔, 阅读(25227) 阅读, 推荐(19) 推荐, 收藏, 编辑
摘要:在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了ASP.NET 5中一个可配置的模块(middleware)了。#配置启用SessionASP.NET 5中的Session模块存在于... 阅读全文
点击右上角即可分享
微信分享提示