初學ASP.NET 知識點

1.C# 中的虛方法 和 C++中的做用一致,能讓指向子類的父類指針優先到子類中尋找方法,而不是直接調用父類中的方法。html

看一段例子回憶下:web

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Person student = new Student();
            student.speak();
            student.sing();
      
        }
    }

    class Person {
        public virtual void speak() {
            Console.WriteLine("person speak");
        }

        public void sing() {
            Console.WriteLine("person sing");
        }
    }

    class Student:Person
    {
        override public void speak()
        {
            Console.WriteLine("student speak");
        }

        new public void sing() {
            Console.WriteLine("student sing");
        }
    }
}

輸出以下:sql

 

 

2. 在程序中使用 HttpContext.Current.Session["CurrentAdmin"] = objAdmin; 這類的與session相關的函數後,asp.net 框架會默認添加一個名爲 ASP.NET_SessionId 的cookie,這個cookie有24個字符,用來讓系統區分請求所對應的session。若是確實不但願這個字段出如今cookie裏,能夠經過調用 Response.Cookies["ASP.NET_SessionId"].Expires = DateTime.Now.AddYears(-1); 讓這個cookie過時,遊覽器就會自動刪除這個cookie。另外這個cookie是保存在內存中的,並不會在磁盤上,因此關了遊覽器,cookie也就沒了。數據庫

 

3. 今天開發遇到一個bug,說的是關於assembly未正確配置,其實這個assembly在.NET中就是對應的dll文件,若是出錯,就須要看看是否是在bin文件夾中缺失了某個dll。express

 

4.今天作一個上傳功能,在服務器端用的是Server.MapPath 這個方法得到路徑,具體的路徑是/Upload ,在默認iis express 運行環境下,沒有問題,後來爲了調試,把程序放到了本機的IIS上,結果上傳沒有錯誤,卻取不到數據了。後來發現,這個網站被當作了子站發佈在了IIS的默認網站下,那麼Server.MapPath 其實返回的是http://localhost/Upload ,也就是在主站點下的upload文件夾,而不是 子站的http://localhost/webapplication/Upload. 因此上傳雖然成功了,可是上傳的位置錯了!要解決問題,把網站做爲單獨主站點就能夠了。服務器

個人錯誤配置以下:cookie

這種在主機端口號後,還有一個路徑的寫法,系統就會爲咱們建立子文件夾存放數據,可是運行時取到的server的path信息,會是主站點的虛擬路徑。session

正確的作法是,先在IIS中建立一個站點,配置好信息,以後在vs中進行配置,修改後的截圖以下:app

 

 

5. 今天在寫Entity Framework相關代碼時,沒有把實體中的關聯屬性聲明爲Virtual,結果發現,沒法從數據庫讀取關聯屬性了,結果所有是null,後來查看了如下文章:框架

https://stackoverflow.com/questions/8542864/why-use-virtual-for-class-properties-in-entity-framework-model-definitions?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa

這裏面說到了,若是不使用virtual對 navigation 屬性聲明,取出的對象就不會包含navigation屬性的相關內容,其實就是不會對navigation屬性進行sql檢索操做。但即便不聲明,也能夠經過其餘方法讀取內容。好比如下代碼:

context.Votes.Include(v => v.ToUser).ToListAsync();

這樣檢索的話,即便 vote 的 toUser 屬性沒有聲明爲virtual,也能夠被sql一次性讀取出來。另外,目前.Net Core 中的 EntityFramework core 默認不支持virtual這種懶加載。

再看看stackoverflow上關於ef中的virtual的說明:

If you opt to never use the lazy loading or change tracking features of the Entity Framework (which is not the default) then you needn't declare any of your navigation properties as virtual. You are then responsible for loading those navigation properties yourself, either using what the Entity Framework refers to as "eager loading", or manually retrieving related types across multiple database queries.

 

 

6.關於IIS 中的 module 和 handler。 在web.config裏,常常能夠看到對module 和 handler的配置section。這裏的module和handler既能夠是本身寫的,也能夠是系統提供的。我對module的理解就是,它處理通用的邏輯,好比,身份驗證,一個請求能夠通過任意多個module的處理。handler針對的是某一類資源的,好比aspx,是真正的處理請求,返回數據的結構,一個請求,只能通過一個handler的處理。推薦一個文章 https://www.cnblogs.com/fengzheng/p/3666774.html

相關文章
相關標籤/搜索