啊解决这个问题,我的大脑是完全忙碌的。当我注册我的 httpmodule 时,我得到了 not-found 错误,否则一切都像一个魅力。
这是我的http模块
public class UrlNormalizerModule : HttpModuleBase {
protected override void OnBeginRequest(HttpContextBase context) {
var originUrl = HttpContext.Current.Request.Url.ToString();
var normalizedUrl = originUrl.NormalizeUrl(false);
if (string.Compare(originUrl, normalizedUrl) != 0) {
var response = context.Response;
response.StatusCode = (int) HttpStatusCode.MovedPermanently;
response.Status = "301 Moved Permanently";
response.RedirectLocation = normalizedUrl;
response.SuppressContent = true;
response.End();
}
}
}
以及如何在 Web.config 中注册模块
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlNormalizerModule" />
<add name="UrlNormalizerModule" type="MagicByte.Web.Modules.UrlNormalizerModule, MagicByte.Web" />
</modules>
</system.webServer>
更新{暂时解决问题}
嗯...我刚刚处理了 HttpApplication 的所有事件,如下所示
context.AuthenticateRequest +=
(sender, e) => OnAuthenticateRequest(new HttpContextWrapper(((HttpApplication) sender).Context));
我不知道为什么,但是当我只处理很少的重要事件时,上述问题就解决了BeginRequest
。那么真正的问题是因为什么?