这是我的RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
这是我的控制者:
[RoutePrefix("dark")]
public class DarkController : Controller
{
public DarkController()
{
this.ViewBag.LayoutName = "_DarkLayout.cshtml";
}
[Route("index.html")]
public ActionResult Index()
{
return View();
}
}
如果我访问/Dark/index.html
,它会加载index.html
文件夹中存在的实际Dark
文件,但如果我从我的黑暗文件夹中删除index.html文件,我的路线似乎工作正常。
我只想给我的路线优先选择,如果找不到,那么它应该转到物理文件。在这里,似乎正好相反,首先是物理文件,如果没有找到,那么我的路线就会被击中。
我的web.config中也有这个:
<modules runAllManagedModulesForAllRequests="true">
<remove name="ApplicationInsightsWebTracking"/>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web"
preCondition="managedHandler"/>
</modules>
有什么方法可以解决这个问题吗?
答案 0 :(得分:0)
您可以为HttpHandler
文件编写自己的*.html
,并在处理程序内部路由。
例如:
public class HtmlFileHandler: IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
var htmlFileRequested = HttpContext.Current.Request.Url.Segments.Contains(".html");
if (htmlFileRequested)
{
// return file by context.Response.WriteFile("");
// don't forget: context.Current.ApplicationInstance.CompleteRequest();
}
else
{
//redirect to controller factory
}
}
public bool IsReusable
{
// To enable pooling, return true here.
// This keeps the handler in memory.
get { return false; }
}
}
的web.config:
<configuration>
<system.web>
<httpHandlers>
<add verb="*" path="*.html"
type="HtmlFileHandler" />
</httpHandlers>
</system.web>
</configuration>