Bagaimana cara mengatur Halaman Default di ASP.NET?

127

Apakah ada bagian atau kode yang memungkinkan kita untuk mengatur halaman default web.config?

Misalnya, ketika orang pertama mengunjungi website saya, saya ingin mereka melihat CreateThing.aspxbukan Default.aspx.

Solusi yang sudah saya tahu:

  1. Letakkan baris kode ini => Response.Redirect("CreateThings.aspx")dalam Default.aspx Page_Loadacara tetapi metode ini benar-benar naif.

  2. Kita dapat menggunakan IIS (konfigurasi halaman default), tetapi saya ingin melakukan hal yang sama pada aplikasi ASP.NET saya.

  3. Ini bisa menjadi solusi lain untuk saat ini:

    <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
sumber

Jawaban:

239

Jika menggunakan IIS 7 atau IIS 7.5 Anda dapat menggunakan

<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
sumber
5
Saya menemukan saya perlu menambahkan atribut enabled = "true" ke tag defaultDocument yaitu: <defaultDocument enabled = "true">
John Ferguson
@JohnFerguson Cheers untuk itu.
Nick
2
Ini harus dimasukkan ke dalam tag <configuration> dari file Web.config.
Mikaël Mayer
Apakah ini akan berfungsi jika Default.aspx ada di folder lain? Sebagai Contoh: <add value = "/ NewSite / default.aspx" />
Apollo
Bekerja dengan IIS8 juga.
WolFSharp
23

Kiat # 84: Tahukah Anda ... Cara mengatur halaman Mulai untuk Situs Web Anda di Visual Web Developer?

Cukup klik kanan pada halaman yang Anda inginkan sebagai halaman awal dan katakan "set as start page".

Seperti dicatat dalam komentar di bawah oleh Adam Tuliper - MSFT, ini hanya berfungsi untuk debugging, bukan penyebaran.

DavidTheDev
sumber
1
Hmm. Bekerja secara lokal, tetapi tidak setelah saya gunakan untuk biru.
Vivek Maharajh
Jawaban yang diterima tidak berhasil untuk saya, tetapi ini berhasil! Terima kasih!
jnel899
6
@vivekmaharajh itu bukan default karena ini dimaksudkan untuk pengujian / debugging - teknik ini tidak mengkonfigurasi server web Anda hanya lingkungan pengembangan Anda.
Adam Tuliper - MSFT
tidak membantu pengalihan ketika pengguna mengakses direktori itu sendiri.
Malcolm Salvador
9

Map default.aspx sebagai rute HttpHandler dan arahkan ke CreateThings.aspx dari dalam HttpHandler.

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

Pastikan Default.aspx tidak ada secara fisik di root aplikasi Anda . Jika ada secara fisik, HttpHandler tidak akan diberi kesempatan untuk mengeksekusi. File fisik menimpa pemetaan HttpHandler.

Selain itu, Anda dapat menggunakannya kembali untuk halaman selain default.aspx.

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

//RedirectHandler.cs di App_Code Anda

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
}
ini. __curious_geek
sumber
Jadi, Anda mengatakan kapan suatu permintaan terjadi Default.aspx, pawang akan mengarahkan permintaan itu ke CreateThing.aspx. Itu terlihat solusi generik. Terima kasih.
Tarik
Tetapi apakah itu akan menyebabkan polusi HttpHandler?
Tarik
Setelah diedit, saya perlu mengatakan: Ya bisa saja. Saya pikir hal yang sederhana akan menjadi seperti Application.Run(new Form()1):)
Tarik
@Arron: Anda selalu dapat membuat bagian konfigurasi khusus yang akan mengonfigurasi Anda HttpHandleruntuk berbagai permintaan yang berbeda. Anda juga dapat menangkap semua permintaan * .aspx dan melihat apakah permintaan cocok dengan salah satu URL yang dikonfigurasi. Kalau tidak, cukup lewati saja.
Robert Koritnik
4

Jika Anda menggunakan otentikasi formulir, Anda dapat mencoba kode di bawah ini:

<authentication mode="Forms">
<forms name=".FORM" loginUrl="Login.aspx" defaultUrl="CreateThings.aspx" protection="All" timeout="30" path="/"> 
</forms>
</authentication>
Zooking
sumber
Untuk menggunakan Formulir Otentikasi, haruskah saya menggunakan penyedia MemberShip atau yang lainnya? Maksud saya ketika saya cukup memilih Mode Otentikasi sebagai Form daripada Windows, kode ini akan bekerja dengan apik bukan?
Tarik
Saya akan mengatakan bahwa ini tergantung pada solusinya. Jika Anda memerlukan solusi yang lebih kompleks dengan profil pengguna yang berbeda maka Anda harus menggunakan MembershipProviders. Tetapi jika ini adalah pengaturan yang lebih sederhana, Anda bisa menggunakan <allow users = "" /> dan <deny users = "" />.
Zooking
3

jika Anda menggunakan halaman login di situs web Anda, buka file web.config

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

ganti tag otentikasi Anda ke atas (di mana index.aspx akan menjadi halaman awal Anda)

dan satu hal lagi tulis ini di dalam file web.config Anda

<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
sumber
3

Anda dapat mengganti pengaturan dokumen default IIS menggunakan web.config

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

Atau menggunakan IIS, lihat tautan untuk referensi http://www.iis.net/configreference/system.webserver/defaultdocument

Mahesh Malpani
sumber
1

Saya lebih suka menggunakan metode berikut:

system.webServer>
  <defaultDocument>
    <files>
      <clear />
      <add value="CreateThing.aspx" />
    </files>
  </defaultDocument>
</system.webServer>
dienkripsi whisper
sumber
1

Saya telah melakukan semua solusi di atas tetapi tidak berhasil.

Halaman default saya bukan halaman aspx, itu halaman html.

Artikel ini menyelesaikan masalah. https://weblog.west-wind.com/posts/2013/aug/15/iis-default-documents-vs-aspnet-mvc-routes

Pada dasarnya, dalam file \ App_Start \ RouteConfig.cs saya, saya harus menambahkan baris:

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 }
    );
}

Semoga ini bisa membantu seseorang, butuh waktu cukup lama untuk menemukan jawabannya.

david wendelken
sumber