Como definir a página padrão no ASP.NET?


127

Existe alguma seção ou código que permita definir a página padrão web.config?

Por exemplo, quando as pessoas primeiro visite o meu site, eu quero que eles vejam CreateThing.aspxem vez de Default.aspx.

As soluções que eu já conheço:

  1. Coloque esta linha de código => Response.Redirect("CreateThings.aspx")no Default.aspx Page_Loadevento, mas esse método é realmente ingênuo.

  2. Podemos usar o IIS (configuração de página padrão), mas quero fazer a mesma coisa no meu aplicativo ASP.NET.

  3. Esta poderia ser outra solução por enquanto:

    <defaultDocument>
        <files>
            <clear />
            <add value="Default.aspx" />
            <add value="Default.htm" />
            <add value="Default.asp" />
            <add value="index.htm" />
            <add value="index.html" />
            <add value="iisstart.htm" />
        </files>
    </defaultDocument>

Respostas:


239

Se você estiver usando o IIS 7 ou IIS 7.5, poderá usar

<system.webServer>
    <defaultDocument>
        <files>
            <clear />
            <add value="CreateThing.aspx" />
        </files>
    </defaultDocument>
</system.webServer>

https://docs.microsoft.com/en-us/iis/configuration/system.webServer/defaultDocument/


5
Eu achei que eu precisava para adicionar o enabled = "true" atributo para a marca defaultDocument ou seja: <defaultDocument enabled = "true">
— John Ferguson

@JohnFerguson Felicidades por isso.
— Nick

2
Isso deve ser colocado na tag <configuration> do arquivo Web.config.
— Mikaël Mayer

Isso funcionará se o Default.aspx estiver em outra pasta? Por exemplo: <add value = "/ NewSite / default.aspx" />
— Apollo

Também funciona com o IIS8.
— WolFSharp 05/03

23

Dica 84: Você sabia ... Como definir uma página inicial para o seu site no Visual Web Developer?

Basta clicar com o botão direito do mouse na página que você deseja que seja a página inicial e dizer "definir como página inicial".

Conforme observado no comentário abaixo de Adam Tuliper - MSFT, isso funciona apenas para depuração, não implantação.


1
Hmm. Funciona localmente, mas não depois da implantação no azure.
— Vivek Maharajh

A resposta aceita não funcionou para mim, mas funcionou! Obrigado!
— jnel899

6
@vivekmaharajh não era o padrão porque isso se destina ao teste / depuração - essa técnica não configura seu servidor da Web apenas seu ambiente de desenvolvimento.
— Adam Tuliper - MSFT

não ajuda a redirecionar quando os usuários acessam o próprio diretório.
— Malcolm Salvador

9

Mapeie default.aspx como rota HttpHandler e redirecione para CreateThings.aspx de dentro do HttpHandler.

<add verb="GET" path="default.aspx" type="RedirectHandler"/>

Verifique se Default.aspx não existe fisicamente na raiz do aplicativo . Se existir fisicamente, o HttpHandler não terá chance de executar. O arquivo físico substitui o mapeamento HttpHandler.

Além disso, você pode reutilizá-lo para páginas que não sejam default.aspx.

<add verb="GET" path="index.aspx" type="RedirectHandler"/>

//RedirectHandler.cs no seu App_Code

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

/// <summary>
/// Summary description for RedirectHandler
/// </summary>
public class RedirectHandler : IHttpHandler
{
    public RedirectHandler()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    #region IHttpHandler Members

    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Redirect("CreateThings.aspx");
        context.Response.End();
    }

    #endregion
}

Então, você diz que sempre que uma solicitação acontece Default.aspx, o manipulador redireciona a solicitação para CreateThing.aspx. Parece uma solução genérica. Obrigado.
— Tarik

Mas isso causaria poluição do HttpHandler?
— Tarik

Após a sua edição, preciso dizer: Bem, pode ser. Eu acho que a coisa simples seria como Application.Run(new Form()1):)
— Tarik

@Arron: Você sempre pode criar uma seção de configuração personalizada que irá configurá-lo HttpHandlerpara várias solicitações diferentes. Você também pode capturar todas as solicitações * .aspx e ver se a solicitação corresponde a qualquer um dos seus URLs configurados. Caso contrário, apenas passe-o.
— Robert Koritnik

4

Se você estiver usando autenticação de formulários, tente o código abaixo:

<authentication mode="Forms">
<forms name=".FORM" loginUrl="Login.aspx" defaultUrl="CreateThings.aspx" protection="All" timeout="30" path="/"> 
</forms>
</authentication>

Para usar a autenticação de formulário, devo usar os provedores MemberShip ou outras coisas? Quero dizer, quando eu simplesmente seleciono o Modo de Autenticação como Formulário em vez de Windows, esse código funciona encantadoramente, certo?
— Tarik

Eu diria que isso depende da solução. Se você precisar de uma solução mais complexa com diferentes perfis de usuário, deverá usar o MembershipProviders. Mas se for uma configuração mais simples, você pode simplesmente usar <allow users = "" /> e <deny users = "" />.
— Zooking

3

se você estiver usando a página de login em seu site, vá para o arquivo web.config

<authentication mode="Forms">
  <forms loginUrl="login.aspx" defaultUrl="index.aspx"  >
    </forms>
</authentication>

substitua sua tag de autenticação por cima (onde index.aspx será sua página de inicialização)

e mais uma coisa, escreva isso no seu arquivo web.config dentro

<configuration>
   <system.webServer>
   <defaultDocument>
    <files>
     <clear />
     <add value="index.aspx" />
    </files>
  </defaultDocument>
  </system.webServer>

  <location path="index.aspx">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
   </system.web>
  </location>
</configuration>


1

Eu prefiro usar o seguinte método:

system.webServer>
  <defaultDocument>
    <files>
      <clear />
      <add value="CreateThing.aspx" />
    </files>
  </defaultDocument>
</system.webServer>

1

Eu tinha feito todas as soluções acima, mas não funcionou.

Minha página padrão não era uma página aspx, era uma página html.

Este artigo resolveu o problema. https://weblog.west-wind.com/posts/2013/aug/15/iis-default-documents-vs-aspnet-mvc-routes

Basicamente, no meu arquivo \ App_Start \ RouteConfig.cs, tive que adicionar uma linha:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("");   // This was the line I had to add here!

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

Espero que isso ajude alguém, levei um bom tempo para encontrar a resposta.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.