我如何使global.asax为一个(现已失效)index.html(又称为糟糕的URL重写)触发



我需要用index.cshtml透明地替换index.html。问题是我无法将更改推送给客户端-他们将继续使用index.html

接下来,我们的IIS没有IIS URL重写扩展,我不希望实现它。

基本上,我需要自己实现重写。但是,当请求index.html时,我的global.asax不会被触发,这是有道理的。

所以,我的问题是如何为index.html触发global.asax

现在,我确实有了一个答案,但由于我不是ASP.NET开发人员,这可能是一个糟糕的答案。

我很乐意接受关于如何使用不同的、更高效和/或更简单的方法重写URL的答案。不过没有HTTP重定向。

p.S.

该应用程序不包含路由、控制器和视图。它本质上是一个静态网站(html+javascript)。cshtml的唯一原因是必须在运行时在服务器端计算某些资源路径。

我的解决方案对我来说已经足够好了。基本上,它是对index.html URL的重写。

概括一下:首先,我在web.config中介绍了一个index.html的伪处理程序:

<system.webServer>
<handlers>
<!-- The handler name is not an error !!! -->
<add name="IndexHtmlHandler" verb="GET" path="index.html" type="Bogus.NonExisting.VirtualHandler" />
</handlers>
</system.webServer>

这足以触发global.asax,它处理实际的重写:

void Application_BeginRequest(object sender, EventArgs e)
{
var context = HttpContext.Current;
if (context.Request.Path.EndsWith("index.html"))
{
context.RewritePath(context.Request.Path.Replace(".html", ".cshtml"));
}
}

最新更新