Подтвердить что ты не робот

Как сайты .NET скрывают расширение .aspx своих файлов?

Я уверен, что stackoverflow.com создается с помощью ASP.NET, но независимо от того, где я нажимаю, я не вижу расширения .aspx в адресной строке. Как это делается и есть ли конкретная причина для этого?

4b9b3361

Ответ 1

В случае stackoverflow они используют ASP.NET MVC, а не веб-формы ASP.NET. С веб-формами url указывает на файл на вашем диске, а MVC указывает на действие контроллера. Если вы используете веб-формы, вы хотите использовать переписывание URL-адресов. У Скотта Гатри есть хорошая статья о том, как переписывать URL.

Ответ 2

Этот сайт использует структуру MVC ASP.NET и карту Urls для маршрутизации не физических страниц. Маршрут переходит к контроллеру, который затем решает, как отображать страницу.

Ответ 3

Скорее всего, это сделано путем перезаписи URL-адресов...

Веб-сервер берет URL-адреса, подобные тем, которые находятся в адресной строке вашего браузера, и перенаправляет их на страницы ASPX за кулисами

Это можно сделать в .NET HTTP-модуле или в качестве обработчика ISAPI в IIS

У Скотта Гутье есть хорошая статья на его сайте о перезаписи URL-адресов

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

Ответ 4

Как и другие люди, StackOverflow построен с использованием ASP.NET MVC, а ASP.NET MVC использует System.Web.Routing. Однако System.Web.Routing не является частью ASP.NET MVC, это был RTMd с пакетом обновления 1 (SP1) и означает, что можно использовать его без ASP.NET MVC. Вы можете увидеть, как использовать его с WebForms здесь: http://haacked.com/archive/2008/03/11/using-routing-with-webforms.aspx и здесь: http://www.codeplex.com/ASPNET35Routing

Ответ 5

которую вы можете достичь, изменив файл web.config.

<configuration>
<system.webserver>
<rewrite>
   <rules>
            <rule name="RemoveASPX" enabled="true" stopProcessing="true">
                <match url="(.*)\.aspx" />
                <action type="Redirect" url="{R:1}" />
            </rule>
            <rule name="AddASPX" enabled="true">
                <match url=".*" negate="false" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    <add input="{URL}" pattern="(.*)\.(.*)" negate="true" />
                </conditions>
                <action type="Rewrite" url="{R:0}.aspx" />
            </rule>
   </rules>
</rewrite>
</system.webserver>
</configuration>

Ответ 6

Вы можете сделать это и многое другое с помощью перезаписи ISAPI (для IIS). Он позволяет создавать дружественные URL-адреса без всех уродливых строк запросов. Это дает пользователям более дружественный интерфейс и может сделать ваш контент более доступным для поиска.

Если вы используете Apache, используйте mod_rewrite.

Основная предпосылка заключается в том, что они используют дружественный URL-адрес (например, тот, который вы видите для этого сайта), затем они преобразуют его, используя ряд правил (обычно это регулярные выражения, которые вы указываете), на внутренние URL-адреса или строки запросов, которые легко понимаемый кодом.

Примером может быть то, что они преобразуют posts/edit/<postnumber> в editPost.aspx?postNumber=<postnumber> с помощью правила преобразования.

Ответ 7

Код ниже работает отлично, если страницы .aspx,.ashx находятся в папке приложения. Приоритет - сначала разрешить страницу .aspx, а затем .ashx.

Например, если вы попробуете localhost/AppFolder/Time, он попытается решить localhost/AppFolder/Time.aspx, а если не найден, то localhost/AppFolder/Time.ashx.

P.S.

  • Я не полностью тестировал этот код, поэтому будьте осторожны.

  • Он не рассматривает папки, которые могут иметь файлы .aspx, поэтому, если вы попытаетесь получить доступ к/PhysicalApplicationPath/MYFOLDER/странице, то это не решит /PhysicalApplicationPath/MYFOLDER/page.aspx.

код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;

namespace NameSpace
{
    public class Global : System.Web.HttpApplication
    {
        private void mapearUrlAmigaveis()
        {
            String url = Request.Path.ToString().ToLower();
            int positionQuestionMarkParameter = url.IndexOf('?');

            String urlSemParametros = (positionQuestionMarkParameter != -1) ? url.Substring(0, (positionQuestionMarkParameter - 1)) : url;
            String[] splitBarra = urlSemParametros.Split('/');
            int indexOfUltimaBarra = urlSemParametros.LastIndexOf('/');

            if (splitBarra.Length > 0)
            {
                String ultimaBarra = splitBarra[(splitBarra.Length - 1)];
                String caminhoLocalUltimaBarra = Request.PhysicalApplicationPath + ultimaBarra;
                String parametros = ((positionQuestionMarkParameter != -1) ? url.Substring((positionQuestionMarkParameter - 1), (url.Length - 1)) : String.Empty);
                if (System.IO.File.Exists(caminhoLocalUltimaBarra + ".aspx"))
                {
                    Context.RewritePath(urlSemParametros + ".aspx" + parametros);
                }
                else if (System.IO.File.Exists(caminhoLocalUltimaBarra + ".ashx"))
                {
                    Context.RewritePath(urlSemParametros + ".ashx" + parametros);
                }
            }
        }
    }
}

Ответ 8

Вы можете сделать это в С#.NET, чтобы использовать настроенное расширение в своем URL-адресе в ASP.NET.

Пусть ".recon" в коде будет вашим настроенным расширением. (замените ".recon" на собственное расширение)

 protected void Application_BeginRequest(object sender, EventArgs e)
 {
    HttpApplication app = sender as HttpApplication;
    if (app.Request.Path.ToLower().IndexOf(".recon") > 0)
    {
        string rawpath = app.Request.Path;
        string path = rawpath.Substring(0, rawpath.IndexOf(".recon"));
        app.Context.RewritePath(path+".aspx");
    }
 }

Ответ 9

и по причине:

  • вы можете изменить технологию (скажем, на PHP) без индексированных или заблокированных URL-адресов.
  • ваши URL-адреса более "REST'ful" и соответствуют ресурсам, а не только файлу
  • вы можете запомнить URL-адрес или прочитать его кому-то по телефону более легко.