จะตั้งค่า Default Page ใน ASP.NET ได้อย่างไร?


127

มีส่วนหรือรหัสใดที่ให้เราตั้งค่าหน้าเริ่มต้นได้web.configหรือไม่?

ตัวอย่างเช่นเมื่อคนกลุ่มแรกที่เข้าเยี่ยมชมเว็บไซต์ของฉันฉันต้องการให้เห็นมากกว่าCreateThing.aspxDefault.aspx

วิธีแก้ปัญหาที่ฉันรู้อยู่แล้ว:

  1. ใส่รหัสบรรทัดนี้ => Response.Redirect("CreateThings.aspx")ในDefault.aspx Page_Loadกรณี แต่วิธีนี้ไร้เดียงสาจริงๆ

  2. เราสามารถใช้ IIS (การกำหนดค่าหน้าเริ่มต้น) แต่ฉันต้องการทำสิ่งเดียวกันกับแอปพลิเคชัน ASP.NET ของฉัน

  3. นี่อาจเป็นทางออกอื่นสำหรับตอนนี้:

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

คำตอบ:


239

หากใช้ IIS 7 หรือ IIS 7.5 คุณสามารถใช้

<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
ฉันพบว่าฉันต้องการเพิ่มแอตทริบิวต์ enable = "true" ให้กับแท็ก defaultDocument เช่น: <defaultDocument enable = "true">
John Ferguson

@JohnFerguson ไชโยสำหรับสิ่งนั้น
Nick

2
ซึ่งจะต้องใส่ในแท็ก <configuration> ของไฟล์ Web.config
Mikaël Mayer

จะใช้งานได้หรือไม่ถ้า Default.aspx อยู่ในโฟลเดอร์อื่น ตัวอย่าง: <add value = "/ NewSite / default.aspx" />
Apollo

ทำงานร่วมกับ IIS8 ด้วย
WolFSharp

23

เคล็ดลับ # 84: คุณรู้หรือไม่…วิธีตั้งค่าหน้าเริ่มต้นสำหรับเว็บไซต์ของคุณใน Visual Web Developer?

เพียงคลิกขวาที่หน้าที่คุณต้องการให้เป็นหน้าเริ่มต้นและพูดว่า "set as start page"

ตามที่ระบุไว้ในความคิดเห็นด้านล่างโดย Adam Tuliper - MSFT สิ่งนี้ใช้ได้กับการดีบักเท่านั้นไม่ใช่การปรับใช้


1
อืมมม ใช้งานได้ในพื้นที่ แต่ไม่ใช่หลังจากที่ฉันปรับใช้กับสีฟ้า
วิเวกมหาราช

คำตอบที่ยอมรับไม่ได้ผลสำหรับฉัน แต่สิ่งนี้ทำได้! ขอบคุณ!
jnel899

6
@vivekmaharajh ไม่ใช่ค่าเริ่มต้นเนื่องจากมีไว้สำหรับการทดสอบ / แก้ไขข้อบกพร่อง - เทคนิคนี้ไม่ได้กำหนดค่าเว็บเซิร์ฟเวอร์ของคุณเฉพาะสภาพแวดล้อมการพัฒนาของคุณ
Adam Tuliper - MSFT

ไม่ช่วยเปลี่ยนเส้นทางเมื่อผู้ใช้เข้าถึงไดเร็กทอรีเอง
Malcolm Salvador

9

แมป default.aspx เป็นเส้นทางHttpHandlerและเปลี่ยนเส้นทางไปยัง CreateThings.aspx จากภายใน HttpHandler

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

ตรวจสอบให้แน่ใจ Default.aspx ไม่ได้อยู่ทางร่างกายที่รากใบสมัครของคุณ หากมีอยู่จริง HttpHandler จะไม่มีโอกาสดำเนินการใด ๆ ฟิสิคัลไฟล์จะแทนที่การแมป HttpHandler

นอกจากนี้คุณสามารถใช้สิ่งนี้ซ้ำสำหรับเพจอื่นที่ไม่ใช่ default.aspx

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

//RedirectHandler.cs ใน 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
}

ดังนั้นคุณจะพูดว่าเมื่อเคยคำขอที่เกิดขึ้นกับตัวจัดการจะเปลี่ยนเส้นทางการร้องขอไปยังDefault.aspx CreateThing.aspxดูเหมือนเป็นวิธีแก้ปัญหาทั่วไป ขอบคุณ.
Tarik

แต่มันจะทำให้เกิดมลพิษ HttpHandler หรือไม่?
Tarik

หลังจากการแก้ไขของคุณฉันต้องบอกว่ามันอาจจะเป็น ฉันคิดว่าสิ่งที่เรียบง่ายจะเป็นเช่นนั้นApplication.Run(new Form()1):)
Tarik

@Arron: คุณสามารถสร้างส่วนการกำหนดค่าที่กำหนดเองซึ่งจะกำหนดค่าของคุณHttpHandlerสำหรับคำขอต่างๆ คุณยังสามารถตรวจจับคำขอ * .aspx ทั้งหมดและดูว่าคำขอตรงกับ URL ที่คุณกำหนดค่าไว้หรือไม่ มิฉะนั้นก็ผ่านมันไป
Robert Koritnik

4

หากคุณใช้การพิสูจน์ตัวตนแบบฟอร์มคุณสามารถลองใช้รหัสด้านล่างนี้:

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

ในการใช้ Form Authentication ฉันควรใช้ผู้ให้บริการ MemberShip หรือสิ่งของต่างๆ? ฉันหมายถึงเมื่อฉันเลือกโหมดการรับรองความถูกต้องเป็นแบบฟอร์มแทนที่จะเป็น Windows รหัสนี้จะทำงานได้อย่างมีเสน่ห์ใช่ไหม
Tarik

ฉันจะบอกว่านี่ขึ้นอยู่กับการแก้ปัญหา หากคุณต้องการโซลูชันที่ซับซ้อนมากขึ้นด้วยโปรไฟล์ผู้ใช้ที่แตกต่างกันคุณควรเลือก MembershipProviders แต่ถ้าเป็นการตั้งค่าที่ง่ายกว่านั้นคุณก็สามารถใช้ <allow users = "" /> และ <ปฏิเสธผู้ใช้ = "" />
Zooking

3

หากคุณกำลังใช้หน้าเข้าสู่ระบบในเว็บไซต์ของคุณให้ไปที่ไฟล์ web.config

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

แทนที่แท็กการรับรองความถูกต้องของคุณเป็นด้านบน (โดยที่ index.aspx จะเป็นหน้าเริ่มต้นของคุณ)

และอีกสิ่งหนึ่งเขียนสิ่งนี้ในไฟล์ web.config ของคุณภายใน

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

3

คุณสามารถแทนที่การตั้งค่าเอกสารเริ่มต้นของ IIS โดยใช้ web.config

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

หรือใช้ IIS โปรดดูลิงค์สำหรับการอ้างอิงhttp://www.iis.net/configreference/system.webserver/defaultdocument


1

ฉันชอบใช้วิธีต่อไปนี้:

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

1

ฉันได้ทำตามวิธีแก้ไขปัญหาข้างต้นทั้งหมดแล้ว แต่ไม่ได้ผล

หน้าเริ่มต้นของฉันไม่ใช่หน้า aspx แต่เป็นหน้า html

บทความนี้แก้ไขปัญหา https://weblog.west-wind.com/posts/2013/aug/15/iis-default-documents-vs-aspnet-mvc-routes

โดยทั่วไปในไฟล์ \ App_Start \ RouteConfig.cs ของฉันฉันต้องเพิ่มบรรทัด:

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

หวังว่านี่จะช่วยใครสักคนฉันใช้เวลาพอสมควรในการค้นหาคำตอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.