針對Linux ASP.NET MVC網站中 httpHandlers配置無效的解決方案

近期有Linux ASP.NET用戶反映,在MVC網站的Web.config中添加 httpHandlers 配置用於處理自定義類型,可是在運行中並無產生預期的效果,服務器返回了404(找不到網頁)錯誤。經我親自測試,在WebForm網站中,httpHandlers節點的配置是有效的,而在MVC中的確無效。若是這個問題不能解決,將嚴重影響Linux ASP.NET的部署,也影響WIN ASP.NET向Linux遷移的兼容性和完整性。服務器

形成httpHandlers無效的緣由我並無時間去深究,爲了可以及時解決這個問題,我把注意力放到了Global.asax文件的Application_BeginRequest方法上,而後給出以下的解決方案。測試

一,在global.asax中添加一個靜態方法:網站

static bool TryHanler<T>(string ext) where T : IHttpHandler
{
    if (string.IsNullOrEmpty(ext)) return false;
    var context = HttpContext.Current;
    var path = context.Request.AppRelativeCurrentExecutionFilePath;
    if (!path.EndsWith(ext)) return false;
    var handle = Activator.CreateInstance(typeof(T)) as IHttpHandler;
    if (handle == null) return false;
    handle.ProcessRequest(context);
    context.Response.End();
    return true;
}orm

說明:這是一個泛型方法,T表明你用於處理某個路徑的繼承自IHttpHandler的自定義類,參數ext是這個處理類所處理的請求路徑的擴展名(含「.」號)。繼承

二,在global.asax中實現Application_BeginRequest方法,並在該方法中調用TryHandler。如:部署

protected void Application_BeginRequest(object sender, EventArgs e)
{
    if(TryHandler<myHandler>(".do")) return;
}string

 

注:該處理方案具備通用性,能同時兼容 Windows IIS和 Linux Jexus或XSP。it

相關文章
相關標籤/搜索