C# .net MapRoute 到 html 文件

C# .net MapRoute to html file

如何设置从根目录到 index.html 文件的 MapRoute?

我想重定向 http://localhost:61944/ to http://localhost:61944/index.html

我试试:

routes.MapRoute(
            name: "Root",
            url: "index.html"
        );

在 RegisterRoutes 内部,但返回 404(未找到)。

谢谢

这有几个问题。

首先,Web.config 中的默认配置将拒绝任何包含 . 字符的 URL。如果你确实为此使用了路由,你会 need to reconfigure the web.config.

也就是说,你特意提到了"file"。 MVC 不提供文件,它提供资源(内容或流)。大多数(如果不是全部)Web 服务器已经设置为提供文件(尤其是 htmlcssjs 文件),因此除非有特定原因需要,否则根本没有理由让 ASP.NET/MVC 参与其中。根据您使用的 Web 服务器,您应该查阅有关如何将 index.html 设置为默认页面的文档。

如果您决定让 MVC 处理请求而不是 Web 服务器,则此路由配置将不起作用,因为它没有按顺序提供所需的路由值 controlleraction实际将 URL 路由到 MVC 控制器。

routes.MapRoute(
        name: "Root",
        url: "index.html",
        defaults: new { controller = "Home", action = "Index" }
    );

I should also point out that this answer applies to MVC 5 without OWIN. For future reference, it would be helpful if you specify or to indicate which version you are referring to.

如果您使用的是 ASP.NET 核心,您可以启用静态文件服务:

Startup.cs

中添加UseStaticFiles()
public void Configure(IApplicationBuilder app)
{
    ...
    app.UseMvcWithDefaultRoute();
    app.UseStaticFiles();
}

您的 index.html 需要在 wwwroot 文件夹中

ASP.NET 路由映射器可以路由到文件或控制器。

试试这个例子:(您需要将 .html 文件重命名为 .aspx,但您不必对其进行任何其他更改。)

在您的路由配置文件中:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // route default URL to index.aspx
        routes.MapPageRoute(
            routeName: "DefaultToHTML",
            routeUrl: "",
            physicalFile: "~/index.aspx",
            checkPhysicalUrlAccess: false,
            defaults: new RouteValueDictionary(),
            constraints: new RouteValueDictionary { {  "placeholder", ""} }
        );

        // other routes go here...

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}

对我有用的就是我发现的 here。只需将此添加到 RegisterRoutes(当然是在 routes.MapRoute 之前):

routes.IgnoreRoute("");