Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Roteamento do ASP.NET

ASP.NET roteamento permite usar URLs que não é necessário mapa a arquivos específicos em Web . Porque não tem a URL para o mapa para um arquivo, você pode usar URLs que são descritivo da ação do usuárioe, portanto, mais facilmente compreendidos pelos usuários.

ASP\ de ASP.NET MVC framework e ASP.NET Dados Dinâmicos estender o roteamento para fornecer os recursos que são usados somente em aplicativos do MVC e em aplicativos de Dados Dinâmicos . For more information about MVC, see <>>ASP\.NET MVC 2. Para obter mais informações sobre Dynamic Data, consulte Mapa de conteúdo de dados dinâmicos do ASP.NET.

Em um ASP.NET aplicativo que usa o roteamento, uma solicitação de entrada para uma URL geralmente mapeia para um arquivo físico que manipula a solicitação, como, por exemplo, um arquivo. aspx. Por exemplo, uma solicitação para http://server/application/Products.aspx?id=4 mapeia para um arquivo que é denominado products. aspx que contém o código e marcação para o renderização de uma resposta para o navegador. A página Web usa o valor de seqüência de caracteres de consulta de id=4 para determinar que tipo de conteúdo de vídeo.

Em ASP.NET roteamento, você pode definir padrões de URL que mapa a solicitação-arquivos de manipulador, mas que não necessariamente incluem os nomes desses arquivos no URL. Além disso, você pode incluir espaços reservados em um padrão de URL para que os dados de variável podem ser passados para o manipulador de solicitação sem a necessidade de uma seqüência de caracteres de consulta .

Por exemplo, na solicitação de http://server/application/Products/show/beverages, o analisador de roteamento pode passar os valores Products, show, e beverages para o manipulador de página. Neste exemplo, se a rota é definida usando o padrão de URL server/application/{area}/{action}/{category}, o manipulador de página receberia uma coleção de dicionário em que o valor associado à chave area é Products, o valor da chave action é showe o valor da chave category é beverages. Em uma solicitação não é gerenciado pelo roteamento de URL , o /Products/show/beverages fragmento deverá ser interpretado como o caminho de um arquivo no aplicativo.

Este tópico contém as seguintes seções:

A rota é um padrão de URL que é mapeado para um manipulador. O manipulador pode ser um arquivo físico, como, por exemplo, um arquivo. aspx em um aplicativode formulários de Web . Um manipulador também pode ser uma classe que processa a solicitação, como um controlador em um aplicativodo MVC. Para definir uma rota, criar uma instância de Route classe especificando o padrão de URL , o manipulador e, opcionalmente, um nome para o roteiro.

Adicionar a rota para o aplicativo , adicionando o Routeoobjeto para o estático Routesapropriedade da RouteTableclasse. O Routespropriedade é um RouteCollectionoobjeto que armazena todas as rotas para o aplicativo.

Você normalmente não precisará escrever código para adicionar rotas em um aplicativodo MVC. Visual Studiomodelos deprojeto do MVC incluem pré-configurado rotas de URL . Esses são definidos na MvcApplication classe, que é definido no arquivo global. asax.

Um padrão de URL pode conter valores literais e os espaços reservados de variável (conhecida como parâmetros deURL). Os literais e os espaços reservados estão localizados em segmentos da URL que são delimitados pelo caractere de barra (/).

Quando uma solicitação é feita, a URL é analisada em segmentos e espaços reservados e os valores de variável são fornecidos para o manipulador de solicitação . Esse processo é semelhante à maneira como os dados em seqüências de caracteres de consulta são analisados e passados para o manipulador de solicitação . Em ambos os casos informações de variável são incluídas na URL e passadas para o manipulador no formulário de chave-valor pares. Para seqüências de caracteres de consulta os valores e as chaves são na URL. Para rotas, as chaves são os nomes de espaço reservado, definidos no padrão de URL e somente os valores são no URL.

Em um padrão de URL , você deve definir espaços reservados, colocando-os entre chaves ({e}). Você pode definir mais de um espaço reservado em um segmento, mas eles devem ser separados por um valor literal. Por exemplo, {language}-{country}/{action} é um padrão de rota válido . No entanto, {language}{country}/{action} é o padrão válido , porque não há nenhum valor literal ou um delimitador entre os espaços reservados. Portanto, o roteamento não pode determinar onde separar o valor para o language espaço reservado do valor para o country espaço reservado.

A tabela a seguir mostra os padrões de rota válido e exemplos de solicitações de URL que correspondam aos padrões.

Definição de rota

Exemplo de URLde correspondência

{controller}/{action}/{id}

/Products/show/beverages

{table}/Details.aspx

/Products/Details.aspx

blog/{action}/{entry}

/blog/show/123

{reporttype}/{year}/{month}/{day}

/sales/2008/1/5

{locale}/{action}

/US/show

{language}-{country}/{action}

/en-US/show

Padrões de URL típicos em aplicativos do MVC

Padrões deURL para rotas em aplicativos do MVC normalmente incluem {controller} e {action} espaços reservados.

Quando uma solicitação é recebida, ela é roteada para o UrlRoutingModule objeto e, em seguida, o MvcHandler manipulador HTTP. O MvcHandler manipulador HTTP determina qual controlador para invocar adicionando o sufixo "Controller" o valor do controlador na URL para determinar o nome do tipo do controlador que manipulará a solicitação. O valor da ação na URL determina qual ação de método para chamar.

Por exemplo, uma URL que inclui o caminho de URL /Products é mapeado para um controlador chamado ProductsController. O valor de action parâmetro é o nome da ação método chamado. Uma URL que inclui o caminho de URL /Products/show resultaria em uma chamada para o Showométodo da ProductsControllerclasse.

A tabela a seguir mostra os padrões de URL padrão e mostra exemplos de solicitações de URL são manipuladas pelas rotas padrão.

PadrãoPadrão deURL

Exemplos de correspondência de URL

{controller}/{action}/{id}

http://server/application/Products/show/beverages

{resource}.axd/{*pathInfo}

http://server/application/WebResource.axd?d=...

A rota com o padrão de {resource}.axd/{*pathInfo} é incluída para impedir que sejam passados para um controladorde solicitações para arquivos derecurso Webcomo WebResource ou ScriptResource. axd.

Para o IIS 7.0, sem- extensão é necessária. Para o IIS 6.0, você deve adicionar a extensão do nome de arquivo-.mvc para o padrão de URL , como no exemplo a seguir:

{controller}.mvc/{action}/{id}

Em um Web Forms aplicativo, você criar rotas usando o MapPageRoute(String, String, String)ométodo da RouteCollectionclasse. O MapPageRoute método cria uma Route objeto e adiciona-lo para o RouteCollection objeto. Especificar propriedades para o Routeoobjeto nos parâmetros que você passa para o MapPageRoutemétodo.

Normalmente, você pode adicionar rotas em um método é chamado a partir do manipulador para o Application_Startoevento no arquivo global. asax. Essa abordagem garante que as rotas estão disponíveis quando o aplicativo for iniciado. Ele também permite que você chamar o método diretamente quando você unidade -teste o aplicativo. Se você quiser chamar um método diretamente quando você unidade -teste o aplicativo, o método que registra as rotas devem ser estático (Shared em Visual Basic) e deve ter um RouteCollection parâmetro.

O exemplo a seguir mostra o código de um arquivo global. asax que adiciona um Routeoobjeto que define dois parâmetros de URL chamados action e categoryName. URLs que têm o padrão especificado são direcionadas para a página física chamada Categories.aspx.

protected void Application_Start(object sender, EventArgs e)
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("",
        "Category/{action}/{categoryName}",
        "~/categoriespage.aspx");
}

Se você adotar a convenção MVC da implementação de controladores, criando classes que derivam de deControllerBaseclasse e dando-lhes nomes que terminam com "Controller", você não precisará adicionar manualmente rotas em um aplicativodo MVC. As rotas pré-configurado irá chamar os métodos de ação que você implementar as classes do controlador .

Se você quiser adicionar rotas personalizadas em um aplicativodo MVC, você usar o MapRoute(RouteCollection, String, String)ométodo em vez da MapPageRoute(String, String, String)método.

O exemplo a seguir mostra o código que cria padrão rotas MVC no arquivo global. asax, conforme definido no Visual Studio projeto modelo para os aplicativos MVC.


public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

    }

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
    }
}


Quando você define uma rota, você pode atribuir um valor padrão para um parâmetro. O valor padrão é usado se o valor desse parâmetro não está incluído na URL. Você definir valores padrão para uma rota atribuindo um dicionário de objeto para o Defaultsapropriedade da Routeclasse. O exemplo a seguir mostra como adicionar uma rota com valores padrão, usando o MapPageRoute(String, String, String, Boolean, RouteValueDictionary) método.

void Application_Start(object sender, EventArgs e) 
{
    RegisterRoutes(RouteTable.Routes);
}

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("",
        "Category/{action}/{categoryName}",
        "~/categoriespage.aspx",
        true,
        new RouteValueDictionary 
            {{"categoryName", "food"}, {"action", "show"}});
}

Quando ASP.NET roteamento lida com uma URL solicitação, mostrada no exemplo de definição de rota (com valores padrão do food para categoryName e show para action) produz os resultados listados na tabela a seguir.

URL

Parameter values

/ Categorias

action= "Mostrar" (ovalor padrão)

categoryName= "comida" (ovalor padrão)

Ou categoria/adicionar

action= "Adicionar"

categoryName= "comida" (ovalor padrão)

/ Categoria/adicionar/bebidas

action= "Adicionar"

categoryName= "Bebidas"

Para aplicativos de MVC, sobrecargas da RouteCollectionExtensions.MapRoute método, como MapRoute(RouteCollection, String, String, Object, Object), que permitem que você especifique os padrões.

Às vezes é necessário manipular as solicitações de URL que contêm um número variável de segmentos de URL . Quando você define uma rota, você pode especificar que, se um URL tiver mais de segmentos que existem no padrão, os segmentos extras são considerados como parte do último segmento. Para manipular os segmentos adicionais dessa maneira você marcar o último parâmetro com um asterisco (*). Isso é conhecido como um todos os catch-parâmetro. Uma rota com um problema de-all parâmetro também corresponderá URLs que não contêm todos os valores para o último parâmetro. O exemplo a seguir mostra um padrão de rota que corresponda a um número desconhecido de segmentos.

query/{queryname}/{*queryvalues}

Quando ASP.NET roteamento lida com umasolicitaçãode URL, a definição de rota mostrada no exemplo produz os resultados listados na tabela a seguir.

URL

Parameter values

/query/select/bikes/onsale

queryname = "selecionar"

queryvalues = "Bicicletas/onsale"

/query/select/bikes

queryname = "selecionar"

queryvalues = "Bicicletas"

/query/select

queryname = "selecionar"

queryvalues = a seqüência de caracteres vazia

Para além de uma URLdesolicitação a uma definição de rota de correspondência pelo número de parâmetros da URL, você pode especificar valores de parâmetros para atender a determinadas restrições. Se um URL contém valores que estão fora de restrições para uma rota, a rota não é usada para manipular a solicitação. Você adicionar restrições para certificar-se de que os parâmetros de URL contêm valores que funcionarão em seu aplicativo.

Restrições são definidas usando expressões regulares ou usando os objetos que implementam o IRouteConstraint interface. Quando você adiciona a definição de rota para o Routescoleção, você adicionar restrições, criando uma RouteValueDictionaryoobjeto que contém a verificaçãodeteste. A chave no dicionário identifica a restrição se aplica ao parâmetro . O valor no dicionário pode ser uma seqüência de caracteres que representa uma expressão regular ou de um objeto que implementa o IRouteConstraint interface.

Se você fornecer uma seqüência de caracteres, roteamento trata a seqüência de caracteres como uma expressão regular e verifica se o valor do parâmetro é válido , chamando o IsMatchométodo da Regexclasse. A expressão regular sempre é tratado como maiúsculas-e minúsculas. Para obter mais informações, consulte Expressões Regulares do .NET Framework.

Se você fornecer um IRouteConstraintobjeto, ASP.NET roteamento verifica se o valor do parâmetro é válido , chamando o Matchométodo da IRouteConstraintobjeto. O Match método retorna um valor booliano que indica se o valor do parâmetro é válido.

O exemplo a seguir mostra como usar o MapPageRoute método para criar uma rota de restrições que limitem os valores que pode ser incluída na locale e year parâmetros. (Um aplicativodo MVC, você usaria o MapRoute método.)

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("",
        "Category/{action}/{categoryName}",
        "~/categoriespage.aspx",
        true,
        new RouteValueDictionary 
            {{"categoryName", "food"}, {"action", "show"}},
        new RouteValueDictionary 
            {{"locale", "[a-z]{2}-[a-z]{2}"},{"year", @"\d{4}"}}
       );
}

Quando o roteamento processa umasolicitaçãode URL, a definição de rota mostrada no exemplo anterior produz os resultados listados na tabela a seguir.

URL

Result

/US

Nenhuma correspondência. Ambos locale e year são necessários.

/US/08

Nenhuma correspondência. A restrição de year requer 4 dígitos.

/US/2008

locale= "BR"

year = "2008"

Em algumas circunstâncias, ASP.NET roteamento não processa uma solicitação , mesmo quando está ativado para Web . Esta seção descreve alguns cenários em que o roteamento não manipula a solicitação.

Encontra-se um Arquivo de físico que corresponde ao padrão de URL

Por padrão, o roteamento não alça solicita o mapa para um arquivo físico existente no servidor Web . Por exemplo, uma solicitação para http://server/application/Products/Beverages/Coffee.aspx não é tratado pelo roteamento se existe um arquivo físico no Products/Beverages/Coffee.aspx. O roteamento não manipular a solicitação mesmo se ele corresponder a um padrão definido, como {controller}/{action}/{id}.

Se desejar que o roteamento para lidar com todas as solicitações, até mesmo as solicitações que apontam para arquivos, você pode substituir o comportamento padrão configuração a RouteExistingFilesapropriedade do RouteCollectionoobjeto para true. Quando você definir esse valor como true, todas as solicitações que correspondem um padrão definido são manipuladas pelo roteamento.

O roteamento estiver explicitamente desativado para um padrão de URL

Você também pode especificar o roteamento não deve tratar determinadas solicitações de URL . Impedir o roteamento do tratamento de determinadas solicitações definindo uma rota e especificando a que o deStopRoutingHandlerclasse deve ser usada para lidar com esse padrão. Quando uma solicitação é tratada por um StopRoutingHandler o objeto, o StopRoutingHandler objeto bloqueia qualquer processamento adicional da solicitação como um roteiro. Em vez disso, a solicitação é processada como uma página ASP.NET, serviço da Web ou outros recursos do ASP.Ponto de extremidade de rede. Você pode usar o RouteCollection.Ignore método (ou RouteCollectionExtensions.IgnoreRoute para os aplicativos MVC) para criar rotas que usam o StopRoutingHandler classe. O exemplo a seguir mostra como impedir o roteamento de solicitações para o arquivo WebResource.

public static void RegisterRoutes(RouteCollection routes)
{
  routes.Ignore("{resource}.axd/{*pathInfo}");
}

Quando o roteamento trata solicitações de URL , ele tenta corresponder à URL da solicitação para uma rota. Uma URLdesolicitação para uma rota de correspondência depende das seguintes condições:

  • Os padrões de rota que você definiu ou rota padrões, se houver, que estão incluídos no seu tipo de projeto .

  • A ordem na qual elas foram adicionadas para o Routesdecoleção.

  • Quaisquer valores padrão que você forneceu para uma rota.

  • Quaisquer restrições que você forneceu para uma rota.

  • Se você tiver definido o roteamento para manipular as solicitações que correspondem a um arquivo físico.

Para evitar a alça de manipulador errado uma solicitação, você deve considerar todas essas condições ao definir rotas. A ordem na qual Route os objetos aparecem na Routes coleção é significativo. Correspondência de rotas é tentado do roteiro primeiro a última rota na coleção. Quando uma correspondência ocorre, não há mais rotas são avaliadas. Em geral, adicionar rotas para o Routesdepropriedade na ordem das definições de rota mais específica para os menos específicos.

Por exemplo, suponha que você adicionar rotas com os seguintes padrões:

  • Roteiro 1 é definido como{controller}/{action}/{id}

  • Roteiro 2 é definido comoproducts/show/{id}

Rota 2 nunca irá lidar com uma solicitação porque a rota 1 é avaliado primeiro e sempre corresponderão solicitações também podem trabalhar para a rota 2. Uma solicitação para http://server/application/products/show/bikes parece corresponder a rota 2 mais de perto, mas ela é manipulada por rota 1 com os seguintes valores:

  • controller is products.

  • action is show.

  • id is bikes.

Valores padrão serão usados se um parâmetro estiver faltando para solicitação. Portanto, eles podem causar uma rota corresponder a uma solicitação que você não esperava. Por exemplo, suponha que você adicionar rotas com os seguintes padrões:

  • Rota 1: {report}/{year}/{month}, com valores padrão para year e month.

  • Rota 2: {report}/{year}, com um valor padrão para year.

Rota 2 nunca irá lidar com uma solicitação. Roteiro 1 pode ser destinado a um relatóriomensal de e 2 de rota pode servir para um relatóriode anual. No entanto, os valores padrão na rota 1 significam que ele corresponderá a qualquer solicitação também funcionaria para 2 de rota.

Você pode evitar ambigüidade os padrões, incluindo constantes, como annual/{report}/{year} e monthly/{report}/{year}/{month}.

Se uma URL não corresponde a nenhum Routeoobjeto que está definido na RouteTablecoleção, ASP.NET roteamento oferece o processo de solicitação. Em vez disso, o processamento é passado para um ASP.NET página, o serviço Web ou outros ASP.NET ponto de extremidade.

Se você quiser criar hiperlinks para páginas no seu site, você pode usar os padrões de URL para programaticamente criar URLs que correspondem às rotas. Quando você altera os padrões, os novos padrões de correspondência de URLs serão gerados automaticamente. Para obter informações sobre como gerar URLs no código ou na marcação, consulte Como: Construir URLs a partir de rotas.

No manipulador para uma solicitação de página roteada, você pode acessar os valores que são passados nos espaços reservados de URL , usando o código ou marcação. For more information, see Como: Acessar parâmetros de URL em uma página roteada.

Para aplicativos de MVC, a MVC framework trata automaticamente os valores passados nos espaços reservados de URL . For more information, see Passagem de dados em um <>ASP\>.NET MVC aplicativo.

Regras de autorização podem ser aplicadas apenas a rota de URL ou a rota URL e a URL física que ele mapeia. Por exemplo, as regras de autorização podem especificar a que todos os usuários podem acessar os URLs que começam com Category , mas somente os administradores podem acessar a página Categories.aspx. Se o padrão de URL da rota contoso.com/Category/{controller}/{action} mapeia para o URLfísica contoso.com/Categoriespage.aspx, e você aplicarregras deautorização somente para a URLde rota, todos os usuários terão acesso a Categoriespage.aspx quando ela é solicitada usando um URLde rota. No entanto, somente os administradores terão acesso a ele quando ela é solicitada usando um URLde física.

Por padrão, as regras de autorização são aplicadas para roteamento de URL e o URLde física. For more information, see the PageRouteHandler.CheckPhysicalUrlAccess property.

A tabela a seguir lista as classes de servidor de chave para ASP.NET roteamento.

CLASS

Descrição

Route

Representa uma rota em um formulários Web ou aplicativodo MVC.

DynamicDataRoute

Representa uma rota em umaplicativode Dados Dinâmicos.

RouteBase

Serve como a classe base para todas as classes que representam um aplicativo ASP.NET rota.

RouteTable

Armazena as rotas para um aplicativo.

RouteCollection

Fornece métodos que permitem gerenciar uma coleção de rotas.

RouteCollectionExtensions

Fornece métodos adicionais que permitem gerenciar uma coleção de rotas em aplicativos do MVC.

RouteData

Contém os valores para uma rota solicitada.

RequestContext

Contém informações sobre o solicitação HTTP que corresponde a uma rota.

StopRoutingHandler

Fornece uma maneira para especificar que o ASP.O roteamento de rede não deve lidar com solicitações para um padrão de URL.

PageRouteHandler

Fornece uma maneira de definir rotas para aplicativos de formulários da Web.

RouteValueDictionary

Fornece uma maneira para armazenar a rota Constraints, Defaults, e DataTokens objetos.

VirtualPathData

Fornece uma maneira de gerar URLs a partir de informações de rota.

ASP.NET roteamento difere de regravação de URL . A regravação deURL processa solicitações de entrada, na verdade, alterando a URL antes de enviar a solicitação para a página Web . Por exemplo, um aplicativo que usa a regravação de URL pode alterar um URL de /Products/Widgets/ para /Products.aspx?id=4. Além disso, a reconfiguração de URL normalmente não tem uma API para a criação de URLs que são baseados em seus padrões. Na regravação de URL , se você alterar o padrão de URL , você deve manualmente atualização todos os hiperlinks que contêm a URLoriginal.

Com ASP.NET roteamento, a URL não é alterada quando uma solicitação de entrada é manipulada, pois o roteamento pode extrair valores da URL. Quando você precisa criar um URL, você passar valores de parâmetro para um método que gera a URL para você. Para alterar o padrão de URL , alterá-lo em um local e o novo padrão de usar todos os links que você criar no aplicativo baseiam-se esse padrão será automaticamente.

Contribuições da comunidade

ADICIONAR
A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2014 Microsoft