.NET跨平台之OWEN中 过滤器的使用
.NET中依赖IIS,通俗的说就是依赖IIS的程序集,导致我们的.NET项目就算是MONO到TOMCAT上,也无法使用,所以OWEN横空出世,OWEN定义了一套接口,接口定义了做.NET项目要实现的一些接口,OWEN本身通过这些接口获取到我们项目中的Request/Response,拿着这些去和Server(IIS\APCHE\TOMCAT...)通信.
回到正题,我们知道在MVC中,可以有
public override void OnActionExecuted(ActionExecutedContext filterContext)
public override void OnAuthorization(AuthorizationContext filterContext)
...
OWEN中就是
namespace Owin { /// <summary> /// An ordered list of known Asp.Net integrated pipeline stages. More details on the ASP.NET integrated pipeline can be found at http://msdn.microsoft.com/en-us/library/system.web.httpapplication.aspx /// </summary> public enum PipelineStage { /// <summary> /// Corresponds to the AuthenticateRequest stage of the ASP.NET integrated pipeline. /// </summary> Authenticate, /// <summary> /// Corresponds to the PostAuthenticateRequest stage of the ASP.NET integrated pipeline. /// </summary> PostAuthenticate, /// <summary> /// Corresponds to the AuthorizeRequest stage of the ASP.NET integrated pipeline. /// </summary> Authorize, /// <summary> /// Corresponds to the PostAuthorizeRequest stage of the ASP.NET integrated pipeline. /// </summary> PostAuthorize, /// <summary> /// Corresponds to the ResolveRequestCache stage of the ASP.NET integrated pipeline. /// </summary> ResolveCache, /// <summary> /// Corresponds to the PostResolveRequestCache stage of the ASP.NET integrated pipeline. /// </summary> PostResolveCache, /// <summary> /// Corresponds to the MapRequestHandler stage of the ASP.NET integrated pipeline. /// </summary> MapHandler, /// <summary> /// Corresponds to the PostMapRequestHandler stage of the ASP.NET integrated pipeline. /// </summary> PostMapHandler, /// <summary> /// Corresponds to the AcquireRequestState stage of the ASP.NET integrated pipeline. /// </summary> AcquireState, /// <summary> /// Corresponds to the PostAcquireRequestState stage of the ASP.NET integrated pipeline. /// </summary> PostAcquireState, /// <summary> /// Corresponds to the PreRequestHandlerExecute stage of the ASP.NET integrated pipeline. /// </summary> PreHandlerExecute, } }
差不多够用了。
代码会这么写:
首先要确定拦截到这个过滤器之后,要干啥
app.Use(typeof(OAuthBearerAuthenticationMiddleware), app, options);
OAuthBearerAuthenticationMiddleware是时间了OWEN接口的自定义中间件,授权用
然后定义中间件在哪个过滤器注入
object obj; if (app.Properties.TryGetValue("integratedpipeline.StageMarker", out obj)) { var addMarker = (Action<IAppBuilder, string>)obj; addMarker(app, PipelineStage.Authenticate.ToString()); }