ASP.NET MVC是否支持某種RequestFilters - 在控制器和動作實例化之前每個請求執行一次的過濾器?ASP.NET MVC請求過濾器
回答
您可以創建自己的路由處理程序,它可能在管道的早期實現您的目標。
public class MyRoutingHandler : IRouteHandler
{
protected virtual IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new InterceptingMvcHandler(requestContext);
}
IHttpHandler IRouteHandler.GetHttpHandler(RequestContext requestContext)
{
return GetHttpHandler(requestContext);
}
}
及對應MVC處理程序:
public class InterceptingMvcHandler : MvcHandler
{
public InterceptingMvcHandler(RequestContext requestContext) : base(requestContext)
{
}
protected override IAsyncResult BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, object state)
{
httpContext.Response.Write("<h2>BeginProcessRequest</h2>");
return base.BeginProcessRequest(httpContext, callback, state);
}
protected override void EndProcessRequest(IAsyncResult asyncResult)
{
var context = RequestContext.HttpContext;
base.EndProcessRequest(asyncResult);
if (context != null)
{
context.Response.Write("<h2>EndProcessRequest</h2>");
}
}
}
然後,您可以註冊MVC處理程序在你的路線註冊。
ASP.NET MVC中有action filters,它允許您在執行請求的不同階段運行一些自定義代碼。
- 動作被執行
- 後的結果呈現
- 之前將結果呈現
根據不同的代碼後你願意執行執行
執行關於您試圖實施的*邏輯*這樣我們可以爲您提供更適合的解決方案。 – SiberianGuy
@Idsa,你可能是一個更具體一點,他們之前不控制器實例 –
我需要在控制器實例化之前確定當前請求的本地化語言,因爲我的本地化服務是根據當前語言註冊的:綁定
這裏是你的例子;
public class CompressFilter : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext filterContext) {
HttpRequestBase request = filterContext.HttpContext.Request;
string acceptEncoding = request.Headers["Accept-Encoding"];
if (string.IsNullOrEmpty(acceptEncoding)) return;
acceptEncoding = acceptEncoding.ToUpperInvariant();
HttpResponseBase response = filterContext.HttpContext.Response;
if (acceptEncoding.Contains("GZIP")) {
response.AppendHeader("Content-encoding", "gzip");
response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
} else if (acceptEncoding.Contains("DEFLATE")) {
response.AppendHeader("Content-encoding", "deflate");
response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
}
}
}
那些你創造了它,你可以用它每個動作,每個控制器甚至全球項目的基礎;
public static void RegisterGlobalFilters(GlobalFilterCollection filters) {
filters.Add(new CompressFilter());
}
- 1. Facebook請求2.0過濾器
- 2. 過濾後的ASP.NET請求DropDownList?
- 3. 通過asp.net mvc網站的html請求
- 4. asp.net MVC - 通過JavaScript類到POST請求
- 5. ASP.NET MVC過濾pagedlist
- 6. 過濾JSON請求
- 7. 請求過濾器與請求攔截器?
- 8. 帶過濾器鏈的Vaadin請求過濾器?
- 9. asp.net mvc全局vs類過濾器
- 10. 調試ASP.NET MVC動作過濾器
- 11. ASP.NET MVC 3緩存過濾器嗎?
- 12. DevExpress ASP.NET MVC獨立過濾器
- 13. 動作過濾器的ASP.NET MVC測試
- 14. 過濾器ASP.NET MVC不工作
- 15. ASP.NET MVC 4操作過濾器問題
- 16. 沖洗和壓縮過濾器(ASP.NET MVC)
- 17. ASP.NET MVC - 時間ajax請求
- 18. asp.net mvc 2轉發請求
- 19. ASP.NET MVC請求轉發
- 20. 在Servlet過濾器中請求null null
- 21. gatling中的請求/響應過濾器
- 22. 過濾器入站請求http
- 23. Web應用程序請求過濾器
- 24. WFS請求層(GML)與過濾器
- 25. 如何測試jersey2請求過濾器?
- 26. Laravel過濾器除內部API請求
- 27. 龍捲風:有請求過濾器嗎?
- 28. 轉發請求從一個過濾器
- 29. 區分澤西島請求過濾器中的多個請求
- 30. ASP.NET MVC授權過濾
行動過濾器執行的操作方法之前被執行,但正如我所說的,我需要實現控制器之前的一些邏輯(主要是它的依賴)的實例化 –