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.