首先选择路由到静态文件

时间:2017-06-01 04:47:16

标签: c# asp.net asp.net-mvc asp.net-mvc-5

这是我的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>

有什么方法可以解决这个问题吗?

1 个答案:

答案 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>

More information about custom HttpHandlers