Asp.Net MVC 학습 요약의 필터에 대한 자세한 설명(그림과 텍스트로 자세한 설명)
이 글에서는 주로 Asp.Net MVC 학습 요약과 필터에 대한 자세한 설명을 소개합니다. 편집자는 꽤 좋다고 생각합니다. 이제 공유해 보겠습니다. 참고로 . 에디터와 함께 구경하러 오세요
1. 필터 소개
1.1 필터가 무엇인지 이해하세요
1. 필터는 요청 처리 파이프라인에 추가 논리를 주입하는 것입니다. 교차 편집 문제를 구현하는 간단하고 우아한 방법을 제공합니다.
2. MVC 프레임워크의 필터는 ASP.NET 플랫폼의 Request.Filters 및 Response.Filter와 완전히 다릅니다. 주로 요청 및 응답 스트림의 전송이 구현됩니다. 일반적으로 필터라고 부르는 것은 MVC 프레임워크의 필터를 나타냅니다.
3. 필터는C#의 속성 구현을 기반으로 일부 코드 로직을 요청 처리 파이프라인에 주입할 수 있습니다. Action 호출을 담당하는 ControllerActionInvoker 클래스가 Action을 호출하고 실행하면 Action의 속성을 확인하고 이러한 속성이 추가 코드 주입 처리를 위해 지정된
인터페이스를 구현하는지 확인합니다. 1.2. 필터를 사용해야 하는 이유 이해
작은 프로젝트를 만들었는데 그 기능 중 하나가 사용자 정보 모듈을 운영하고 관리하는 것이라고 가정해 보겠습니다. 그러한 요구 사항이 있는 경우 사용자 정보 관리는 반드시 수행되어야 합니다. be 인증된 사용자만 동작할 수 있으며, 아래와 같이 각 Action 메서드에서 인증 요청을 확인할 수 있습니다.using MvcFilterDmo.Core; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Security; namespace MvcFilterDmo.Controllers { public class HomeController : Controller { public ActionResult Index() { if (!Request.IsAuthenticated) { FormsAuthentication.RedirectToLoginPage(); } //操作部分... return View(); } public ActionResult Insert() { if (!Request.IsAuthenticated) { FormsAuthentication.RedirectToLoginPage(); } //操作部分... return View(); } public ActionResult Update() { if (!Request.IsAuthenticated) { FormsAuthentication.RedirectToLoginPage(); } //操作部分... return View(); } public ActionResult Delete() { if (!Request.IsAuthenticated) { FormsAuthentication.RedirectToLoginPage(); } //操作部分... return View(); } //其他Action操作方法 //... } }
using MvcFilterDmo.Core; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Security; namespace MvcFilterDmo.Controllers { [Authorize] public class HomeController : Controller { public ActionResult Index() { //操作部分... return View(); } public ActionResult Insert() { //操作部分... return View(); } public ActionResult Edit() { //操作部分... return View(); } public ActionResult Delete() { //操作部分... return View(); } //其他Action操作方法 //... } }
2. 필터 사용
2.1 필터의 기본 유형
필터링 메커니즘 구현자 구현: MVC 프레임워크는 작업을 호출하기 전에 속성(속성)이 메서드 정의에 구현되었는지 확인합니다. 구현된 경우 속성에 의해 정의된 메서드가 요청의 적절한 위치에서 호출됩니다. 처리 파이프라인.추상 클래스입니다. AuthorizeAttribute 및 HandleErrorAttribute 클래스에는 몇 가지 유용한 기능이 포함되어 있으며 파생 클래스를 만들지 않고도 사용할 수 있습니다.
2.2. 필터 적용, 적용 방법 및 실행 순서
적용: 필터는컨트롤러에 적용할 수 있으며, Action 메소드를 컨트롤에 적용하면 모든 Action 메소드에 이 필터가 있고 아래와 같이 혼합하거나 여러 번 사용할 수 있음을 의미합니다.
[A] //表示所有的Action方法都会应用A过滤器 Public class DemoController:Controller { [B]//B,C过滤器只作用于此Action方法,但它也会有A过滤器的应用效果 [C] Public ActionResult Index() { //操作部分... return View(); } }
적용 방법: 특성, 위의 코드에 표시된 것처럼.
실행 순서: 동일한 유형의 필터의 경우 메소드에 가장 가까운 순서가 먼저 실행됩니다. 다른 유형의 필터의 경우 일반적인 실행 순서는 [authorize--- >action---> actionResult] 예외 필터는 이 예외를 발생시키는 한 특별한 순서 없이 실행됩니다. 실행 순서를 조정하려면 순서 방식 값을 조정하여 실행 순서를 제어할 수 있습니다. 값이 작을수록 빨리 실행됩니다. 다음 그림은 Action/Result 필터 애플리케이션
(2)、不同类型过滤器应用示例:有一个自定义Action过滤器MyFirstFilter,有一个自定义Result过滤器MySecondFilter,应用到同一个Action方法Index上。
Three控制器代码如下:
MyFirstFilter 代码如下:
MySecondFilter代码如下:
运行结果如下:
看完上面的解释,可能你现在对这些过滤器的执行顺序,以及如何自定义过滤器还不明白,不要紧,下面我们会逐一介绍这几个基本的过滤器的使用,以及如何自定义过滤器。
2.3、使用授权过滤器
所有实现了IAuthorizationFilter接口的都可以称之为授权过滤器:其定义如下:
public interface IAuthorizationFilter { void OnAuthorization(AuthorizationContext filterContext); }
由于MVC框架系统自带的AuthorizeAttribute实现有一些突出的功能,而这种牵涉到安全的代码一定要谨慎的编写,所以一般我们不会直接实现这个接口,而是去继承AuthorizeAttribute这个类,并重写其AuthorizeCore方法,签名为: bool AuthorizeCore(HttpContextBase httpContext) 而处理授权失败的时候,可以重写其HandleUnauthorizedRequest方法,其签名为: void HandleUnauthorizedRequest(AuthorizationContext context) 。注意:验证与授权是两回事,验证发生在授权之前。
默认的授权过滤器已经有了验证的功能,其验证的机理是利用Asp.net平台自带的验证机制,如表单验证和Windows验证。除了验证功能,它本身还有授权的功能。授权过滤器是所有过滤器中最早运行的。
经过Route到达了控制器的时候,在调用Action之前,MVC框架会检测在相关的Action上是否有授权过滤器,如果有会调用OnAuthorization方法,如果此方法批准了请求,才会调用相应的Action。
使用授权过滤器几种情况如下:
1.直接在Action上或者控制器上加Authorize,表示启用了验证,但不牵涉到授权。
2.添加Authorize(Users=“a,b”)],表示启用了验证,并且也启用了授权,只有a或者b用户能访问此控制器。
3.当添加Authorize(Roles=“admin,Member”)]时的步骤如下:
---利用asp.net自带的角色提供者,或者实现自己的角色提供者,实现自己的角色提供者时,只需要集成RoleProvider类型,并实现其中的所有方法或部分方法,最好实现所有方法。
---在Web程序的根目录的Web.config文件中配置角色管理者。
---在适当的Action中利用Roles类型来访问自己创建的RoleProvider中的相关方法。
使用内置的授权过滤器
MVC框架内置的授权过滤器AuthorizeAttribute,它允许我们使用这个类的两个公共属性来指定授权策略,如下所示:
Users和Roles两者是并且的关系,例如Users=“a,b,c”,Roles=“admin”,表示用户是a,b,c 其中一个并且是Admin角色才能访问。
创建自定义的授权过滤器
方式一:直接实现IAuthorizationFilter接口,但不推荐这样做,因为牵涉到安全方面的代码。
方式二:继承AuthorizeAttribute这个类,并重写其AuthorizeCore方法,签名为: bool AuthorizeCore(HttpContextBase httpContext),代码如下所示:
public class MyAuthorizeAttribute : AuthorizeAttribute { private string[] allowedUsers; public MyAuthorizeAttribute(params string[] users) { allowedUsers = new string[] { "admin", "user1", "xf" }; } protected override bool AuthorizeCore(HttpContextBase httpContext) { return httpContext.Request.IsAuthenticated &&allowedUsers.Contains(httpContext.User.Identity.Name, StringComparer.InvariantCultureIgnoreCase); } }
2.4、使用动作过滤器
动作过滤器是可以以用于任何目的的多用途过滤器,创建自定义动作过滤器需要实现IActionFilter接口,该接口代码如下所示:
该接口定义了两个方法,MVC框架在调用动作方法之前,会调用OnActionExecting方法。在调用动作方法之后,则会调用OnActionExecuted方法。
实现OnActionExecting方法
参数ActionExecutingContext对象继承于ControllerContext,其中的2个属性:
ActionDescriptor:提供了关于Action方法的相关信息
Result:类型为ActionResult,通过给这个属性设置一个非null的值就可以取消这个请求。
我们可以用过滤器来取消一个请求,通过设置Result属性即可。代码如下所示:
public class MyActionFilterAttribute : FilterAttribute, IActionFilter { public void OnActionExecuting(ActionExecutingContext filterContext) { if(filterContext.HttpContext.Request.IsLocal) { filterContext.Result = new HttpNotFoundResult(); } } public void OnActionExecuted(ActionExecutedContext filterContext) { //未做实现 } }
这个例子通过用OnActionExecuting方法检查请求是否来自本地机器,如果是,编队用户返回一个“404”未找到的响应。运行结果如下图:
实现OnActionExecuted方法
我们也可以通过OnActionExecuted方法来执行一些跨越动作方法的任务,下面这个例子是计算动作方法运行的时间,代码如下:
public class MyActionFilterAttribute : FilterAttribute, IActionFilter { private Stopwatch timer; public void OnActionExecuting(ActionExecutingContext filterContext) { timer = Stopwatch.StartNew(); } public void OnActionExecuted(ActionExecutedContext filterContext) { timer.Stop(); if (filterContext.Exception == null) { filterContext.HttpContext.Response.Write( string.Format("动作方法延迟的时间: {0}", timer.Elapsed.TotalSeconds)); } } } }
我们将自定义的动作过滤器MyActionFilter应用到HomeController的Index方法上,运行结果如下:
2.5、使用结果过滤器
结果过滤器是多用途的过滤器,他会对动作方法所产生结果进行操作,结果过滤器实现IResultFilter接口,创建自定义结果过滤器需要现IResultFilter接口,该接口代码如下所示:
当结果过滤器运用于一个动作方法时,会在动作方法返回动作结果之前,调用OnResultExecuting方法,在返回动作结果之后,会调用OnResultExecuted方法。下面这个例子是计算动作方法返回结果运行的时间,代码如下:
public class MyResultFilterAttribute : FilterAttribute, IResultFilter { private Stopwatch timer; public void OnResultExecuting(ResultExecutingContext filterContext) { timer = Stopwatch.StartNew(); } public void OnResultExecuted(ResultExecutedContext filterContext) { timer.Stop(); filterContext.HttpContext.Response.Write(string.Format("结果执行延迟时间: {0}", timer.Elapsed.TotalSeconds)); } }
我们将自定义的结果过滤器MyResultFilter应用到HomeController的Index方法上,运行结果如下:
需要注意的是:动作过滤器是运行在页面输出之前,结果过滤器是运行在页面输出之后。
2.6、使用异常过滤器
异常过滤器只有在调用一个动作方法而抛出未处理的异常才会运行,这种异常来自以下位置:
A、另一种过滤器(授权、动作、或结果过滤器)。
B、动作方法本身。
C、当动作结果被执行时。
使用内置的异常过滤器
HandleErrorAttribute(处理程序错误特性),它是MVC内嵌的异常过滤器,有以下3个重要的属性:
1.ExceptionType:类型为Type,表示希望被此过滤器处理的异常类型,包括其子类型,默认值为System.Exception
2.View:类型为string,表示此过滤器呈递的视图页面,默认值为Error
3.Master:呈递的视图页的母板页,如果不指定,视图会用其默认的母版页
内嵌的HandleErrorException只有在配置文件Web.config中配置的CustomError 的mode设置为on的时候才生效(其默认模式为RemoteOnly),如下图所示:
此过滤器还会给视图传递一个HandleErrorInfo类型的对象给视图,以便视图可以显示一些额外的关于错误的信息。下面是使用异常过滤器的示例。
应用到Index动作方法上:
在Views/Shared文件夹下添加一个显示异常信息的视图页SpecialError.cshtml,页面代码如下:
@model HandleErrorInfo <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>SpecialError</title> </head> <body> <p> <p> There was a<b>@Model.Exception.GetType().Name</b> while rendering<b>@Model.ControllerName</b>'s <b>@Model.ActionName</b> action </p> </p> </body> </html>
运行结果如下:
创建自定义的异常过滤器
如果我们对异常过滤器有特殊的需求,可以通过自定义的异常过滤器来完成,创建自定义异常过滤器必须实现IExceptionFilter接口,该接口代码如下:
当一个未知处理异常发生时,OnException方法会被调用。该方法的传递一个ExceptionContext对象,派生于ControllerContext类,定义了一些额外的过滤器专有属性如下表所示:
抛出的异常通过Exception属性是可以访问的。通过把ExceptionHandled属性设置为true,一个异常过滤器可以报告它已经处理了该异常,应用于一个动作的所有异常过滤器都会被调用。
需要注意的是:如果一个动作方法的所有异常过滤器均为把ExceptionHandled属性设置为true,MVC框架将使用默认的ASP.NET异常处理程序。
Result属性有异常过滤器使用,以告诉MVC框架要做什么,异常过滤器的两个主要应用是记录该异常到日志,并把适当的消息显示给用户。下面的代码将演示通过创建一个自定义的异常过滤器,当一个特定的钟类的未处理异常出现时,把该用户重定向到一个指定的错误页面。
public class MyExectionAttribute:FilterAttribute,IExceptionFilter { public void OnException(ExceptionContext filterContext) { if(!filterContext.ExceptionHandled&& filterContext.Exception is NullReferenceException) { filterContext.Result = new RedirectResult("~/Content/SpecialErrorPage.html"); filterContext.ExceptionHandled = true; } } }
然后在项目根目录添加一个名为Content的文件夹,在该文件夹下创建SpeciErrorPage.html文件,当异常被处理时,将以这个错误页面显示个用户。该页面代码如下:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <h1>Sorry</h1> <p>this is a Excetption test</p> There was aNullReferenceException while renderingHome's Index action </body> </html>
在控制器中应用MyExection异常过滤器,并主动让其抛出一个空引用异常,以便测试。
public class HomeController : Controller { [MyExection] public ActionResult Index() { throw new NullReferenceException(); } }
运行结果如下:
总结:本文章简单总结了对过滤器的理解以及如何使用MVC框架内置基本的过滤器和如何自定义过滤器及应用。
위 내용은 Asp.Net MVC 학습 요약의 필터에 대한 자세한 설명(그림과 텍스트로 자세한 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











소개 오늘날 빠르게 발전하는 디지털 세계에서는 강력하고 유연하며 유지 관리가 가능한 웹 애플리케이션을 구축하는 것이 중요합니다. PHPmvc 아키텍처는 이러한 목표를 달성하기 위한 이상적인 솔루션을 제공합니다. MVC(Model-View-Controller)는 애플리케이션의 다양한 측면을 독립적인 구성 요소로 분리하는 널리 사용되는 디자인 패턴입니다. MVC 아키텍처의 기초 MVC 아키텍처의 핵심 원칙은 관심사 분리입니다. 모델: 애플리케이션의 데이터와 비즈니스 로직을 캡슐화합니다. 보기: 데이터 표시 및 사용자 상호 작용 처리를 담당합니다. 컨트롤러: 모델과 뷰 간의 상호 작용을 조정하고 사용자 요청과 비즈니스 로직을 관리합니다. PHPMVC 아키텍처 phpMVC 아키텍처는 전통적인 MVC 패턴을 따르지만 언어별 기능도 도입합니다. 다음은 PHPMVC입니다.

Vue 오류: 필터의 필터를 올바르게 사용할 수 없습니다. 어떻게 해결합니까? 소개: Vue에서 필터는 데이터 형식을 지정하거나 필터링하는 데 사용할 수 있는 일반적으로 사용되는 기능입니다. 하지만 사용 중에 필터를 제대로 사용하지 못하는 문제가 발생할 수 있습니다. 이 문서에서는 몇 가지 일반적인 원인과 해결 방법을 다룹니다. 1. 원인 분석: 필터가 올바르게 등록되지 않았습니다. Vue의 필터를 템플릿에서 사용하려면 먼저 등록해야 합니다. 필터가 성공적으로 등록되지 않은 경우,

MVC 아키텍처(Model-View-Controller)는 코드를 구성하고 WEB 애플리케이션 개발을 단순화하기 위한 명확한 구조를 제공하기 때문에 PHP 개발에서 가장 널리 사용되는 패턴 중 하나입니다. 기본 MVC 원칙은 대부분의 웹 애플리케이션에 충분하지만 복잡한 데이터를 처리하거나 고급 기능을 구현해야 하는 애플리케이션에는 몇 가지 제한 사항이 있습니다. 모델 계층 분리 모델 계층을 분리하는 것은 고급 MVC 아키텍처에서 일반적인 기술입니다. 여기에는 모델 클래스를 더 작은 하위 클래스로 나누는 작업이 포함되며, 각 하위 클래스는 특정 기능에 중점을 둡니다. 예를 들어 전자 상거래 애플리케이션의 경우 기본 모델 클래스를 주문 모델, 제품 모델 및 고객 모델로 나눌 수 있습니다. 이러한 분리는 코드 유지 관리성과 재사용성을 향상시키는 데 도움이 됩니다. 의존성 주입 사용

FILTER_VALIDATE_URL 상수는 URL의 유효성을 검사하는 데 사용됩니다. FILTER_FLAG_SCHEME_REQUIRED−URL 플래그는 RFC를 준수해야 합니다. FILTER_FLAG_HOST_REQUIRED−URL에는 호스트 이름이 포함되어야 합니다. FILTER_FLAG_PATH_REQUIRED−URL에는 도메인 이름 뒤에 경로가 있어야 합니다. FILTER_FLAG_QUERY_REQUIRED−URL에는 쿼리 문자열이 있어야 합니다. 반환 값 FILTER_VALIDATE_URL

Vue3의 필터 기능: 데이터를 우아하게 처리하기 Vue는 대규모 커뮤니티와 강력한 플러그인 시스템을 갖춘 인기 있는 JavaScript 프레임워크입니다. Vue에서 필터 기능은 템플릿의 데이터를 처리하고 형식을 지정할 수 있는 매우 실용적인 도구입니다. Vue3의 필터 기능에 몇 가지 변경 사항이 있습니다. 이 기사에서는 Vue3의 필터 기능에 대해 자세히 알아보고 이를 사용하여 데이터를 적절하게 처리하는 방법을 알아봅니다. 필터 기능이란 무엇입니까? Vue에서 필터 기능은 다음과 같습니다.

Vue 기술 개발에서 데이터 필터링 및 정렬 방법 Vue 기술 개발에서 데이터 필터링 및 정렬은 매우 일반적이고 중요한 기능입니다. 데이터 필터링 및 정렬을 통해 필요한 정보를 신속하게 쿼리하고 표시할 수 있어 사용자 경험이 향상됩니다. 이 기사에서는 Vue에서 데이터를 필터링하고 정렬하는 방법을 소개하고 독자가 이러한 기능을 더 잘 이해하고 사용할 수 있도록 구체적인 코드 예제를 제공합니다. 1. 데이터 필터링 데이터 필터링이란 특정 조건에 따라 요구 사항을 충족하는 데이터를 필터링하는 것을 의미합니다. Vue에서는 comp를 전달할 수 있습니다.

PHP 이메일 필터: 스팸을 필터링하고 식별합니다. 이메일이 널리 보급되면서 스팸의 양도 계속해서 증가하고 있습니다. 사용자에게 수신되는 스팸의 양은 정보 과부하와 시간 낭비로 이어질 수 있습니다. 따라서 스팸 이메일을 필터링하고 식별하는 효율적인 방법이 필요합니다. 이 기사에서는 PHP를 사용하여 간단하지만 효과적인 이메일 필터를 작성하는 방법을 보여주고 구체적인 코드 예제를 제공합니다. 이메일 필터의 기본 원리 이메일 필터의 기본 원리는 이메일이 유효한지 여부를 결정하는 것입니다.

Vue에서 플러그인을 사용하여 사용자 정의 필터를 구현하는 팁 Vue.js는 뷰 데이터 필터링, 즉 필터에 대한 요구를 처리하는 편리한 방법을 제공합니다. 필터는 주로 데이터를 보다 직관적이고 이해하기 쉽게 만들기 위해 뷰의 데이터 형식을 지정하고 처리하는 역할을 합니다. Vue에는 날짜 형식, 통화 형식 등과 같이 일반적으로 사용되는 필터가 내장되어 있으며 사용자 정의 필터도 지원합니다. 이 기사에서는 Vue 플러그인을 사용하여 사용자 정의 필터를 구현하는 방법을 소개하고 몇 가지 실용적인 필터링 기술을 제공합니다.
