ASP.NET'te Varsayılan Sayfa nasıl ayarlanır?


127

Varsayılan sayfayı ayarlamamıza izin veren herhangi bir bölüm veya kod var mı web.config?

Örneğin, insanlar web sitemi ilk ziyaret ettiklerinde, onların CreateThing.aspxyerine görmelerini istiyorum Default.aspx.

Zaten bildiğim çözümler:

  1. => Bu kod satırını koy Response.Redirect("CreateThings.aspx")içinde Default.aspx Page_Loadolay ama bu yöntem gerçekten saflık olur.

  2. IIS'yi (varsayılan sayfa yapılandırması) kullanabiliriz, ancak aynı şeyi ASP.NET uygulamamda da yapmak istiyorum.

  3. Bu şimdilik başka bir çözüm olabilir:

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

Yanıtlar:


239

IIS 7 veya IIS 7.5 kullanıyorsanız,

<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
DefaultDocument etiketine enable = "true" özniteliğini eklemem gerektiğini fark ettim, yani: <defaultDocument enabled = "true">
John Ferguson

@JohnFerguson Şerefe.
Nick

2
Bu, Web.config dosyasının <configuration> etiketine eklenmelidir.
Mikaël Mayer

Default.aspx başka bir klasördeyse bu işe yarar mı? Örneğin: <add value = "/ NewSite / default.aspx" />
Apollo

IIS8 ile de çalışır.
WolFSharp

23

84. İpucu: Biliyor muydunuz… Web Siteniz için Visual Web Developer'da bir Başlangıç ​​sayfası nasıl ayarlanır?

Başlangıç ​​sayfası olmasını istediğiniz sayfaya sağ tıklayın ve "başlangıç ​​sayfası olarak ayarla" demeniz yeterli.

Adam Tuliper - MSFT'nin aşağıdaki yorumunda belirtildiği gibi, bu, dağıtım için değil, yalnızca hata ayıklama için işe yarar.


1
Hmm. Yerel olarak çalışıyor, ancak Azure'a konuşlandırıldıktan sonra değil.
Vivek Maharajh

Kabul edilen cevap benim için işe yaramadı, ama bu işe yaradı! Teşekkürler!
jnel899

6
@vivekmaharajh varsayılan değildir çünkü bu test / hata ayıklama içindir - bu teknik web sunucunuzu yalnızca geliştirme ortamınızı yapılandırmaz.
Adam Tuliper - MSFT

kullanıcılar dizine eriştiğinde yeniden yönlendirmeye yardımcı olmaz.
Malcolm Salvador

9

Default.aspx öğesini HttpHandler rotası olarak eşleyin ve HttpHandler içinden CreateThings.aspx öğesine yeniden yönlendirin.

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

Default.aspx'in fiziksel olarak uygulama kökünüzde bulunmadığından emin olun . Fiziksel olarak mevcutsa, HttpHandler'a yürütme şansı verilmeyecektir. Fiziksel dosya, HttpHandler eşlemesini geçersiz kılar.

Ayrıca, default.aspx dışındaki sayfalar için bunu yeniden kullanabilirsiniz.

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

//RedirectHandler.cs, App_Code'unuzda

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
}

Yani, ne zaman bir istek olursa Default.aspx, işleyicinin isteği yeniden yönlendireceğini söylüyorsunuz CreateThing.aspx. Genel bir çözüm gibi görünüyor. Teşekkür ederim.
Tarik

Ama HttpHandler kirliliğine neden olur mu?
Tarik

Düzenlemenizden sonra şunu söylemeliyim: Olabilir. Sanırım basit şey şöyle olurdu Application.Run(new Form()1):)
Tarik

@Arron: Her zaman HttpHandlerçeşitli farklı istekler için sizi yapılandıracak özel bir yapılandırma bölümü oluşturabilirsiniz . Ayrıca tüm * .aspx isteklerini yakalayabilir ve isteğin yapılandırılmış URL'lerinizden herhangi biriyle eşleşip eşleşmediğini görebilirsiniz. Aksi takdirde sadece geçin.
Robert Koritnik

4

Form kimlik doğrulaması kullanıyorsanız, aşağıdaki kodu deneyebilirsiniz:

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

Form Kimlik Doğrulamasını kullanmak için, MemberShip sağlayıcılarını veya diğerlerini kullanmalı mıyım? Demek istediğim, Windows yerine Form olarak Kimlik Doğrulama Modunu seçtiğimde, bu kod çekici bir şekilde çalışacak değil mi?
Tarik

Bunun çözüme bağlı olduğunu söyleyebilirim. Farklı kullanıcı profilleri ile daha karmaşık bir çözüme ihtiyacınız varsa, MembershipProviders ile gitmelisiniz. Ancak daha basit bir kurulumsa, sadece <allow users = "" /> ve <deny users = "" /> kullanabilirsiniz.
Zooking

3

Web sitenizde oturum açma sayfasını kullanıyorsanız web.config dosyasına gidin

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

kimlik doğrulama etiketinizi yukarıdakiyle değiştirin (burada index.aspx başlangıç ​​sayfanız olacaktır)

ve bir şey daha bunu web.config dosyanıza yazın

<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

Aşağıdaki yöntemi kullanmayı tercih ederim:

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

1

Yukarıdaki tüm çözümleri yaptım ama işe yaramadı.

Varsayılan sayfam bir aspx sayfası değildi, bir html sayfasıydı.

Bu makale sorunu çözdü. https://weblog.west-wind.com/posts/2013/aug/15/iis-default-documents-vs-aspnet-mvc-routes

Temel olarak, \ App_Start \ RouteConfig.cs dosyamda bir satır eklemem gerekiyordu:

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

Umarım bu birisine yardımcı olur, cevabı bulmam biraz zaman aldı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.