Asp.net маршрутизация для маскировки физической папки в пути - PullRequest
2 голосов
/ 03 мая 2011

Чтобы лучше организовать свой проект ASP.Net, я поместил все свои файлы .aspx в папку с именем WebPages.

Я хотел бы найти способ замаскировать папку «WebPages» из всех моих URL-адресов.,Например, я не хочу использовать следующие URL-адреса:

http://localhost:7896/WebPages/index.aspx
http://localhost:7896/WebPages/Admin/security.aspx

Но вместо этого я хотел бы, чтобы все мои URL-адреса были следующими («Веб-страницы» - это физическая папка, которую я использую для структурирования своей работы)., но не должен быть видимым для внешнего мира):

http://localhost:7896/index.aspx
http://localhost:7896/admin/security.aspx

Мне удалось найти собственное решение, указав записи маршрутизации «для каждой страницы», которые есть в моем проекте (иэто работает), но это просто не поддерживается в будущем, и мне нужен другой метод.

public class Global : HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapPageRoute("", "index.aspx", "~/WebPages/index.aspx");
        routes.MapPageRoute("", "admin/security.aspx", "~/WebPages/Admin/security.aspx");
    }
}

Возможно, что мне нужно, это класс, который перехватывает все запросы и просто добавляет мой физический каталог WebPages?

Ответы [ 2 ]

0 голосов
/ 04 мая 2011

Я наконец выбрал следующее решение, которое хорошо подходит для моей ситуации:

В моем файле Global.asax у меня есть следующий код:

public class Global : HttpApplication
{
    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        if (Request.Path.EndsWith(".aspx"))
        {
            FixUrlsForPages(Context, Request.RawUrl);
        }
    }

    private void FixUrlsForPages(HttpContext context, string url)
    {
        context.RewritePath("/WebPages" + url);
    }
}

Это в значительной степениделать то, что предложил Tudor, но в коде вместо web.config (что я не мог получить работу).

0 голосов
/ 03 мая 2011

Используйте http://www.iis.net/download/urlrewrite вместо этого

У вас будет это в вашем web.config:

<rewrite>
  <rules>
    <rule name="Rewrite to Webpages folder">
      <match url="(.*)" />
      <action type="Rewrite" url="/WebPages/{R:1}" />
    </rule>
  </rules>
</rewrite>
...