Làm cách nào để đặt Trang mặc định trong ASP.NET?


127

Có phần hay mã nào cho phép chúng ta đặt trang mặc định web.configkhông?

Ví dụ, khi mọi người lần đầu truy cập trang web của tôi, tôi muốn họ xem CreateThing.aspxhơn là Default.aspx.

Các giải pháp tôi đã biết:

  1. Đặt dòng mã này => Response.Redirect("CreateThings.aspx")trong Default.aspx Page_Loadsự kiện nhưng phương thức này thực sự ngây thơ.

  2. Chúng tôi có thể sử dụng IIS (cấu hình trang mặc định), nhưng tôi muốn làm điều tương tự trên ứng dụng ASP.NET của mình.

  3. Đây có thể là một giải pháp khác cho bây giờ:

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

Câu trả lời:


239

Nếu sử dụng IIS 7 hoặc IIS 7.5, bạn có thể sử dụng

<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
Tôi thấy tôi cần thêm thuộc tính enable = "true" vào thẻ defaultDocument tức là: <defaultDocument enable = "true">
John Ferguson

@JohnFerguson Chúc mừng cho điều đó.
Nick

2
Điều này sẽ được đặt trong thẻ <configure> của tệp Web.config.
Mikaël Mayer

Điều này có hoạt động không nếu Default.aspx nằm trong một thư mục khác? Ví dụ: <add value = "/ NewSite / default.aspx" />
Apollo

Hoạt động với IIS8 cũng vậy.
WolFSharp

23

Mẹo số 84: Bạn có biết cách Cách đặt trang Bắt đầu cho Trang web của bạn trong Visual Web Developer không?

Chỉ cần nhấp chuột phải vào trang bạn muốn trở thành trang bắt đầu và nói "đặt làm trang bắt đầu".

Như đã lưu ý trong nhận xét dưới đây của Adam Tuliper - MSFT, điều này chỉ hoạt động để gỡ lỗi, không triển khai.


1
Hừm. Hoạt động tại địa phương, nhưng không phải sau khi tôi triển khai đến phương vị.
Vivek Maharajh

Câu trả lời được chấp nhận đã không làm việc cho tôi, nhưng điều này đã làm! Cảm ơn!
jnel899 6/07/2015

6
@vivekmaharajh nó không phải là mặc định vì điều này có nghĩa là để kiểm tra / gỡ lỗi - kỹ thuật này không cấu hình máy chủ web của bạn chỉ môi trường phát triển của bạn.
Adam Tuliper - MSFT

không giúp chuyển hướng khi người dùng truy cập vào thư mục chính nó.
Malcolm Salvador

9

Ánh xạ default.aspx dưới dạng định tuyến httpHandler và chuyển hướng đến CreateThings.aspx từ bên trong HttpHandler.

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

Đảm bảo Default.aspx không tồn tại về mặt vật lý tại thư mục gốc của bạn . Nếu nó tồn tại về mặt vật lý, httpHandler sẽ không có cơ hội thực thi. Tập tin vật lý ghi đè lên ánh xạ httpHandler.

Ngoài ra, bạn có thể sử dụng lại điều này cho các trang khác ngoài default.aspx.

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

//RedirectHandler.cs trong App_Code của bạn

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
}

Vì vậy, bạn nói khi nào một yêu cầu xảy ra Default.aspx, trình xử lý sẽ chuyển hướng yêu cầu đến CreateThing.aspx. Có vẻ như một giải pháp chung chung. Cảm ơn bạn.
Tarik

Nhưng nó sẽ gây ra ô nhiễm httpHandler?
Tarik

Sau khi chỉnh sửa của bạn, tôi cần phải nói: Vâng nó có thể. Tôi nghĩ điều đơn giản sẽ như thế Application.Run(new Form()1):)
Tarik

@Arron: Bạn luôn có thể tạo một phần cấu hình tùy chỉnh sẽ định cấu hình HttpHandlercho các yêu cầu khác nhau khác nhau. Bạn cũng có thể bắt tất cả các yêu cầu * .aspx và xem liệu yêu cầu có khớp với bất kỳ URL nào được định cấu hình của bạn không. Nếu không thì chỉ cần vượt qua.
Robert Koritnik

4

Nếu bạn đang sử dụng xác thực mẫu, bạn có thể thử mã dưới đây:

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

Để sử dụng Xác thực mẫu, tôi nên sử dụng MemberShip hoặc công cụ của nhà cung cấp? Ý tôi là khi tôi chỉ cần chọn Chế độ xác thực là Biểu mẫu chứ không phải Windows, mã này sẽ hoạt động một cách quyến rũ phải không?
Tarik

Tôi sẽ nói rằng điều này phụ thuộc vào giải pháp. Nếu bạn cần một giải pháp phức tạp hơn với các hồ sơ người dùng khác nhau thì bạn nên đi với MemberhipProviders. Nhưng nếu đó là một thiết lập đơn giản hơn, bạn chỉ có thể sử dụng <allow users = "" /> và <deny users = "" />.
Zooking

3

nếu bạn đang sử dụng trang đăng nhập trong trang web của mình, hãy truy cập tệp web.config

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

thay thế thẻ xác thực của bạn ở trên (trong đó index.aspx sẽ là trang khởi động của bạn)

và một điều nữa viết điều này trong tệp web.config của bạn bên trong

<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

Tôi thích sử dụng phương pháp sau:

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

1

Tôi đã thực hiện tất cả các giải pháp trên nhưng nó không hoạt động.

Trang mặc định của tôi không phải là trang aspx, đó là trang html.

Bài viết này đã giải quyết vấn đề. https://weblog.west-wind.com/posts/2013/aug/15/iis-default-document-vs-aspnet-mvc-routes

Về cơ bản, trong tệp \ App_Start \ RouteConfig.cs của tôi, tôi đã phải thêm một dòng:

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

Hy vọng điều này sẽ giúp được ai đó, tôi đã mất rất nhiều thời gian để tìm ra câu trả lời.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.