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>
Tarik
fonte

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/

David Glenn
fonte
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.

DavidTheDev
fonte
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
}
isto. __curious_geek
fonte
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>
Zooking
fonte
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>
JD-V
fonte
3

Você pode substituir a configuração de documento padrão do IIS usando o web.config

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

Ou, usando o IIS, consulte o link para referência http://www.iis.net/configreference/system.webserver/defaultdocument

Mahesh Malpani
fonte
1

Eu prefiro usar o seguinte método:

system.webServer>
  <defaultDocument>
    <files>
      <clear />
      <add value="CreateThing.aspx" />
    </files>
  </defaultDocument>
</system.webServer>
encryptedwhisper
fonte
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.

david wendelken
fonte