一、目的
此代码可重定向文件请求,用于多机房存储不同的附件,无需修改业务代码
二、代码
CloudFileModule.cs
public class CloudFileModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.EndRequest += Context_EndRequest;
}
private void Context_EndRequest(object sender, EventArgs e)
{
var app = (HttpApplication)sender;
if (app.Response.StatusCode == 404)
{
var extensions = ConfigurationManager.AppSettings.Get("RedirectExtensions");
var idcUrl = ConfigurationManager.AppSettings.Get("IdcUrl");
if (string.IsNullOrWhiteSpace(extensions) || string.IsNullOrWhiteSpace(idcUrl))
{
throw new ConfigurationErrorsException("AppSettings中缺少RedirectExtensions或IdcUrl配置");
}
var arrExtensions = extensions.ToLower().Split(',');
var urlExtension = new FileInfo(app.Request.Url.LocalPath).Extension.ToLower();
if (arrExtensions.Contains(urlExtension))
{
app.Response.Clear();
app.Response.Redirect(idcUrl + app.Request.RawUrl);
app.Response.End();
}
}
}
}
Web.config
<appSettings>
<add key="RedirectExtensions" value=".mp4,.jpg,.png"/>
<add key="IdcUrl" value="http://192.168.3.33:8000"/>
</appSettings>
...
<system.webServer>
<modules>
<add name="CloudFileModule" type="CloudFileRedirector.CloudFileModule" />
</modules>
</system.webServer>