Asp.Net MVC学习总结之过滤器详解

一、过滤器简介

1.1、理解什么是过滤器

1、过滤器(Filters)就是向请求处理管道中注入额外的逻辑。提供了一个简单而优雅的方式来实现横切关注点。

2、所谓的过滤器(Filters),MVC框架里面的过滤器完全不同于ASP.NET平台里面的Request.Filters和Response.Filter对象,它们主要是实现请求和响应流的传输。通常我们所说的过滤器是指MVC框架里面的过滤器。

3、过滤器可以注入一些代码逻辑到请求处理管道中,是基于C#的Attribute的实现。当负责调用Action的类ControllerActionInvoker在调用执行Action的时候会检查Action上面的Attribute并查看这些Attribute是否实现了指定的接口,以便进行额外的代码注入处理

ASP.NET08

配置错误页

1
2
3
4
5
6
7
8
9
10
11
<customErrors mode="On" defaultRedirect="~/test2/404.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>
---------------------------在Application_Error中发生错误时转向另外一个页面------------------------
protected void Application_Error(object sender, EventArgs e)
{
string errorMsg = Context.Error.Message + Environment.NewLine + Context.Error.StackTrace + "【" + DateTime.Now.ToString() + "】" + Environment.NewLine + "====================================================" + Environment.NewLine;
File.AppendAllText(Server.MapPath("~/log.txt"), errorMsg);
Response.Redirect("~/test2/404.htm");
}

mvc中只能将静态页面放在根目录或者创建一个Error控制器

【HTTP】HTTPS 原理详解

前言

HTTPS(全称:HyperText Transfer Protocol over Secure Socket Layer),其实 HTTPS 并不是一个新鲜协议,Google 很早就开始启用了,初衷是为了保证数据安全。 近两年,Google、Baidu、Facebook 等这样的互联网巨头,不谋而合地开始大力推行 HTTPS, 国内外的大型互联网公司很多也都已经启用了全站 HTTPS,这也是未来互联网发展的趋势。

ASP.NET MVC 视图

设计并非外观怎样,感觉如何。设计是(解决)如何工作的问题 –Steve Jobs

视图引擎的结构与性能

视图引擎是位浏览器生成html输出的组件

控制器—数据—>视图模板—–>html

视图引擎机制

在asp.net mvc中,视图引擎只是一个实现固定接口(IViewEngine)的类。

ASP.NET06

httprequest一些成员

  • Request.UrlReferrer获取请求该资源的原地址

    用处:判断host是否为本站

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public void ProcessRequest(HttpContext context)
    {
    var uri = context.Request.UrlReferrer;
    if (uri == null || uri.Host != "localhost")
    {
    context.Response.ContentType = "text/plain";
    context.Response.Write("forbid");
    context.Response.End();
    }
    context.Response.ContentType = "image/jpg";
    context.Response.WriteFile("536896a693f71.jpg");
    }

    只有在img请求和localhost下才能访问

  • Request.UserHostAddress获得访问者的IP地址

ASP.NET05

创建缩略图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var file = context.Request.Files[0]; 
//从上传图片创建大图
using (var bigImage = Image.FromStream(file.InputStream))
{
//等比创建小图
using (var smallImage = new Bitmap(200, 200 * bigImage.Height / bigImage.Width))
{
//创建画布将大图画入小图
using (var graphics = Graphics.FromImage(smallImage))
{
graphics.DrawImage(bigImage, 0, 0, smallImage.Width, smallImage.Height);
}
//保存
bigImage.Save(context.Server.MapPath(Guid.NewGuid() + "_big.jpg"));
smallImage.Save(context.Server.MapPath(Guid.NewGuid() + "_small.jpg"));
}
}

ASP.NET MVC 控制器

人么总说事件会改变一切,当实际上你必须自己动手去改变一切——Andy Warhol

对输入请求进行路由

在软件中,URI(统一资源标识符)是指通过一个位置或者名称来引用资源。

当URI通过位置来识别资源是,就叫做URL(统一定位符)

当URI通过名称标志资源时,就叫做URN(统一资源名称)

ASP.NET MVC 旨在处理更通用的URI,ASP.NET Web Forms只要处理位置感知的物理资源

CSharp高效编程摘记

C#

查询语法(query syntax)的一个用处

循环创建集合|数组时,用查询语法(query syntax)会比普通控制流程的结构好点,

主要体现在:

  • 命令式的版本有时非常难以理解,要是没有注释或文档,后续维护人员将要重读整段代码才能进行开发。
  • 另外,查询语法比循环结构能提供更具组合性的API。查询语法将很自然的把代码分解成小块代码,每一块仅仅对序列中元素进行单一的操作。查询语法的延迟执行模型也让开发者能将这些单一的操作组合成多步操作,且在一次遍历序列时完整执行。

ASP.NET04

文件上传

html中添加表单

1
2
3
4
<form method="post" enctype="multipart/form-data" action="ProcessUpload.ashx">
<input type="file" name="file1"/>
<input type="submit" value="upload"/>
</form>

文件上传注意点:

  1. 必须使用post
  2. form中enctype="multipart/form-data",使用表单快
  3. 添加文件域 <input type="file" name="file1"/>