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 服务器已经设置为提供文件(尤其是 html
、css
和 js
文件),因此除非有特定原因需要,否则根本没有理由让 ASP.NET/MVC 参与其中。根据您使用的 Web 服务器,您应该查阅有关如何将 index.html
设置为默认页面的文档。
如果您决定让 MVC 处理请求而不是 Web 服务器,则此路由配置将不起作用,因为它没有按顺序提供所需的路由值 controller
和 action
实际将 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 asp.net-mvc-5 or asp.net-core 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("");
如何设置从根目录到 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 服务器已经设置为提供文件(尤其是 html
、css
和 js
文件),因此除非有特定原因需要,否则根本没有理由让 ASP.NET/MVC 参与其中。根据您使用的 Web 服务器,您应该查阅有关如何将 index.html
设置为默认页面的文档。
如果您决定让 MVC 处理请求而不是 Web 服务器,则此路由配置将不起作用,因为它没有按顺序提供所需的路由值 controller
和 action
实际将 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 asp.net-mvc-5 or asp.net-core 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("");