最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET中實(shí)現(xiàn)文件的保護(hù)性下載基礎(chǔ)篇

 更新時間:2011年02月15日 23:58:16   作者:  
許多時候,我們需要在因特網(wǎng)上提供文件下載服務(wù),但是又要防止未經(jīng)授權(quán)的下載,這時該怎么辦?本文將為讀者詳細(xì)介紹一種使用ASP.NET實(shí)現(xiàn)的HTTP處理程序的解決方案。
一、文件保護(hù)性下載的需求

  如果我們需要在站點(diǎn)上出售數(shù)字形式的商品,如電子書、數(shù)字油畫等,那么如何在供授權(quán)用戶正常下載的同時又阻止非授權(quán)用戶非法下載您的產(chǎn)品呢? 通過Forms身份驗證,只能使這個問題得到部分解決。本文中,我將講解如何防止某些用戶訪問站點(diǎn)上的某些文件;即使這些文件能夠被這些用戶直接瀏覽。

  解決這個問題的方法有多種,但是有些方法本身就有問題。本文中,我們將考察軟件供應(yīng)廠商常用的一些技術(shù),然后再介紹一種新的解決方案。需要注意的是,這里介紹的是針對ASP.net站點(diǎn)的。

  二、常見的文件保護(hù)技術(shù)

  我們中很多人都有網(wǎng)上購買軟件的經(jīng)驗,所以可能領(lǐng)教過用于文件下載的常見保護(hù)措施。下面,我們對它們進(jìn)行考察。

  壓縮文件口令保護(hù)

  這種保護(hù)方法比較簡單,它不是防止您下載文件,而是防止未經(jīng)授權(quán)的人員從壓縮文件中提取文件的內(nèi)容,因為WinZip和許多其他壓縮程序都提供了口令保護(hù)功能。然而,這種方法的缺點(diǎn)也很明顯,如果您允許某人訪問該文件內(nèi)容,那就必須給他提供口令,之后,您卻無法阻止這個人將口令傳給其他人。實(shí)際上,如果您搜索互聯(lián)網(wǎng)的話,會發(fā)現(xiàn)各種各樣的口令遍地都是。采用這種保護(hù)措施的時候,只能指望授權(quán)用戶是有道德的人,不會將口令外傳?;蛘?,將這種保護(hù)措施提供一個層次,為每個人生成一個不同口令的壓縮文件,然后傳給他。 當(dāng)然,這需要一個文件存儲解決方案,因為需要能控制發(fā)送給用戶的文件。這導(dǎo)致第二種文件保護(hù)方法。

  電子郵件

  許多軟件供應(yīng)廠商并不會把文件張貼到它們的網(wǎng)站上,而是向購買該軟件的用戶發(fā)送一封電子郵件,告知下載詳細(xì)信息,或者直接連同文件一塊發(fā)過去。 電子郵件可以包含文件下載鏈接,并限定該鏈接的有效時間。有時候,軟件供應(yīng)商還可以將這種這種技術(shù)跟口令保護(hù)相結(jié)合。文件一旦交到用戶手里,剩下的保護(hù)措施就靠軟件許可和注冊了。其他基于電子郵件的解決方案還有動態(tài)生成文件名方法。

  臨時文件名

  一些軟件供應(yīng)廠商會使用GUID或者其它的秘密的命名技術(shù)生成一個難以猜測的文件名,同時還可以令文件只能在規(guī)定時間內(nèi)下載。

  三、技術(shù)分析

  雖然這些技術(shù)仍在使用,但是它們卻不能在您的站點(diǎn)上開辟一片客戶區(qū)域,使得用戶能夠檢查他們的購買歷史記錄,并隨時重新下載他們的軟件。依我看來,提供了類似功能的站點(diǎn)能夠提供更好的用戶體驗,對軟件供應(yīng)商來說也更容易管理——用戶購買產(chǎn)品之后,您僅需給用戶發(fā)送一封包含許可證密鑰和他們在站點(diǎn)上相應(yīng)客戶區(qū)域的鏈接即可。這樣的話,用戶知道可以隨時登錄和下載軟件,他們就會安心多了,即使弄丟了軟件文件也不用怕了。

  為此,我們將介紹一種結(jié)合了ASP.net的Forms身份驗證和稱為HTTP處理程序的保護(hù)方案來提供這種良好的用戶體驗。類System.Web.UI.Page本身就是一個HTTP處理程序,并且會注冊到您的機(jī)器的Web.config文件中。

內(nèi)容導(dǎo)航

  四、HTTP處理程序

  實(shí)際上,使用ASP.NET定制HTTP處理程序并沒有人們想象的那么復(fù)雜,下面我們用盡量容易理解的方式來討論這一主題。HTTP處理程序的應(yīng)用有很多,不過我們這里主要討論它在文件保護(hù)問題方面的應(yīng)用。

用ASP.NET實(shí)現(xiàn)文件的保護(hù)性下載基礎(chǔ)篇

  圖1 IIS中的擴(kuò)展名映射

  下面我們將介紹什么是處理程序,及其工作原理,同時我們力爭做到進(jìn)行可能簡單。在當(dāng)ASP.NET環(huán)境中,您請求一個ASPX頁面的時候,IIS會將該請求傳遞給相應(yīng)的DLL來進(jìn)行處理。所謂HTTP處理程序,就是處理IIS傳給它們的請求的那些類。當(dāng)您在機(jī)器上安裝ASP.NET的時候,會隨同向IIS添加一串表項(參見圖 1)。這些表項包含希望ASP.NET處理的文件的擴(kuò)展名(ASPX、ASMX等等)。當(dāng)我們請求一個ASPX的時候,IIS收到該請求后,會將其傳遞給相應(yīng)的DLL,在本例中為aspnet_isapi.dll,隨后生產(chǎn)相應(yīng)的HTTP處理程序?qū)嵗齺硖幚碓撜埱?。就ASPX頁面而論,用到的HTTP處理程序是位于System.Web.UI命名空間中的一個Page類。

  就ASPX頁面而論,頁面處理程序用來控制和觸發(fā)生命周期事件;當(dāng)您瀏覽一個ASPX頁面的時候,基本上一切工作都是由它來處理的。然而,您可以編寫一個定制的HTTP處理程序來攔截瀏覽器發(fā)出的所有的請求,從而調(diào)整或者定制正常發(fā)生的動作。為此,我們需要用到多種技術(shù),本文中我將首先討論其中的IIS表項,以及Forms身份驗證有關(guān)內(nèi)容。

  五、IIS與Forms身份驗證

  前面提過,IIS會把注冊的擴(kuò)展名發(fā)送到aspnet_isapi.dll。圖1展示的是找到的已注冊擴(kuò)展名。我們可以在虛擬目錄或者網(wǎng)站的“Properties”中的“Configuration”選項就可以看到這個對話框。帶有由aspnet_isapi.dll進(jìn)行處理的已注冊擴(kuò)展名的任何文件都受到ASP.NET的Forms身份驗證的支配。下面我們對Forms身份驗證的運(yùn)行機(jī)制做簡單介紹。

  定制的HTTP處理程序?qū)嶋H上就是實(shí)現(xiàn)了IHttpHandler接口的那些類。Forms身份驗證允許您防止匿名用戶在未授權(quán)的情況下訪問某些web頁面。文件web.config利用以下代碼來設(shè)置Forms身份驗證:



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

   <authentication mode="Forms">
  
<forms loginUrl="Login.aspx"/>
  
</authentication>
  
<authorization>
  
<deny users="?"/>
  
</authorization>

  上面的代碼會防止沒有通過身份驗證的用戶訪問所有的頁面。如果一個匿名用戶試圖訪問一個網(wǎng)頁,該代碼會自動地將他們重定向到Login.aspx頁面。這樣一來,站點(diǎn)開發(fā)人員就能決定在這個頁面中使用哪種身份驗證方法,但是在ASP.NET 2.0中,開發(fā)人員可以很輕松地使用新的安全控件來完成此項工作。

  現(xiàn)在,我們說過這個代碼能夠阻止未通過身份驗證的用戶訪問任何頁面,但是準(zhǔn)確來說它是阻止了未經(jīng)認(rèn)證的用戶訪問所有被aspnet_isapi.dll攔截的那些文件。這將在后面詳加解釋。為了給本文的后面的內(nèi)容做鋪墊,我們需要先描述示例電子商務(wù)站點(diǎn)的一些具體細(xì)節(jié)。

內(nèi)容導(dǎo)航

  六、保護(hù)措施規(guī)劃

  假設(shè)我們的站點(diǎn)使用戶能在線購買軟件,但是在購買或者下載軟件之前,用戶必須首先注冊。然后,分別為用戶和產(chǎn)品建立一個表,然后分別存放用戶名和產(chǎn)品序列號。當(dāng)用戶購買軟件的時候,通過在另一個表中創(chuàng)建一個記錄來關(guān)聯(lián)用戶和產(chǎn)品。我們稱這個表為UserProducts。

  我們想把所有的軟件產(chǎn)品文件存儲在一個稱為files的文件夾中,該文件夾位于網(wǎng)站的根文件夾之中。產(chǎn)品表有一個字段,用于產(chǎn)品文件名,該文件名對應(yīng)于files文件夾中的一個壓縮文件。 我們稱這個字段為ProductFileName。下面我們逐步介紹如何保護(hù)這些ZIP 文件。

  七、保護(hù)所有的壓縮文件

  首先,我們要防止所有的壓縮文件被未經(jīng)驗證的用戶所下載。我們要讓所有擴(kuò)展名為.zip的文件經(jīng)由ASP.NET 的Forms身份驗證處理,這樣匿名用戶就不能訪問它們了。雖然這一步并不是最關(guān)鍵的,但是它確實(shí)提供了文件的安全性。

  通常如果您能直接瀏覽某網(wǎng)站上的一個ZIP 文件,該站點(diǎn)會提示您打開或者將該文件保存到硬盤上。我們想讓ASP.NET攔截對擴(kuò)展名為zip的文件的請求,所以需要在IIS的應(yīng)用程序映射表中添加相應(yīng)的擴(kuò)展名。

  為此,可以打開IIS的管理控制臺,找到相應(yīng)的站點(diǎn)或虛擬目錄,單擊右鍵并選擇“Properties”選項,就會顯示圖 2。如果單擊“Web Site”或者“Virtual Directory”選項卡中的“Configuration”按鈕的話,就會看到擴(kuò)展名表和用于處理它們的DLL,見圖1。我們必須將擴(kuò)展名“zip”添加到這個列表中,為此,可以單擊“add”按鈕,然后再擴(kuò)展名文本框中鍵入“zip”,并單擊“Limit to verb”選項按鈕。

用ASP.NET實(shí)現(xiàn)文件的保護(hù)性下載基礎(chǔ)篇

圖2 網(wǎng)站屬性

用ASP.NET實(shí)現(xiàn)文件的保護(hù)性下載基礎(chǔ)篇

圖3 導(dǎo)航至aspnet_isapi.dll

內(nèi)容導(dǎo)航

  在Verbs文本框中,鍵入GET、HEAD、POST、DEBUG,以指示aspnet_isapi.dll攔截zip類型文件的請求。在Executable:文本框中,導(dǎo)航至aspnet_isapi.dll文件的位置,見圖3。這個文件位于相應(yīng)框架版本文件夾下的C:\WINDOWS\Microsoft.NET\Framework\目錄中,如圖4所示。

  用ASP.NET實(shí)現(xiàn)文件的保護(hù)性下載基礎(chǔ)篇

圖4 給IIS添加zip擴(kuò)展名映射

  用ASP.NET實(shí)現(xiàn)文件的保護(hù)性下載基礎(chǔ)篇

圖5 映射zip擴(kuò)展名

  建立這個表項后,我們的映射表將如圖5所示。注意在這個表中的所有其他擴(kuò)展名例如VBPROJ、CONFIG等等,aspnet_isapi.dll也會攔截這些擴(kuò)展名以便進(jìn)行保護(hù)。這就是當(dāng)企圖瀏覽web.config文件時會被重定向到一個拒絕頁面的原因。

  在IIS中創(chuàng)建這個表項之后,如果嘗試直接瀏覽我們站點(diǎn)上的ZIP文件的時候,如果用戶沒有通過身份驗證的話,IIS會將其重定向到登錄頁面。所以,現(xiàn)在我們已經(jīng)能夠防止匿名用戶下載我們的文件了,不過,一旦通過了站點(diǎn)的身份驗證,這種保護(hù)就形同虛設(shè)了。

內(nèi)容導(dǎo)航

  八、更加具體的保護(hù)措施

  我們的目標(biāo)是,讓授權(quán)用戶能夠瀏覽一個包含了已經(jīng)購買的軟件的頁面,并且通過單擊其中的鏈接就可以下載特定的商品。列出產(chǎn)品時,可以使用表結(jié)構(gòu),但是如何來保護(hù)鏈接呢? 之前我們介紹的方法只是防止匿名用戶下載壓縮文件,但是現(xiàn)在我們要防止授權(quán)用戶直接瀏覽壓縮文件。為此,我們需要編寫一個定制的處理程序。

  定制的HTTP處理程序是實(shí)現(xiàn)了IHttpHandler接口的類。這個接口定義了一個稱為ProcessRequest的方法,以及一個Boolean類型的名為IsReusable的屬性。該屬性決定了其它請求是否能夠利用同一個處理程序,所以這里簡單返回一個真值。這個方法將會收到一個HttpContext類型的參數(shù)。這變量為我們提供了訪問該請求整個上下文的權(quán)限,包括請求中的信息和訂制另一個方向上的請求的方法。

  現(xiàn)在,我們要創(chuàng)建一個稱為FileDenialHandler的處理程序,它的作用是停止一個請求,并將用戶重定向到一個頁面來通知他們訪問被拒絕。當(dāng)這個處理程序取得該請求的時候,就會調(diào)用ProcessRequest方法并且執(zhí)行重定向。



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

public void ProcessRequest(HttpContext context)
   {
   context.Response.Redirect(
      
"~/Downloads/Files/AccessDenied.aspx");
   }

  如您所見,這個頁面位于根目錄的Downloads/Files文件夾中,完整的FileDenialHandler.cs處理程序如下所示:



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
namespace DotNetDude.Web.UI
{
  
public class FileDenialHandler : IHttpHandler
   {
      
public void ProcessRequest(HttpContext context)
      {
         context.Response.Redirect(
            
"~/Downloads/Files/AccessDenied.aspx");
      }

      
public bool IsReusable
      {
        
get
         {
            
return true;
         }
      }
   }
}

  現(xiàn)在,這個FileDenialHandler類什么也沒做,所以必須將其寫入站點(diǎn)。為了這樣,我們將其放入web.config文件的中。

  文件web.config列出了配置部分的所有特殊處理程序,并為其規(guī)定了相應(yīng)的信息,包括實(shí)例化這個處理程序的謂詞,匹配要讓這個處理程序來處理的文件的通配符路徑,以及用于該定制的處理程序的類型定義。在這個例子中,添加的配置部分如下所示:



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

   <httpHandlers>
  
<add verb="*" path="*.zip"
   type
="DotNetDude.Web.UI.
   FileProtectionHandler,
   DotNetDude.HttpHandlers"
/>
  
</httpHandlers>

  參數(shù)type是標(biāo)準(zhǔn)的.NET完全限定名寫法,并通過逗號組合了一個組件程序集名稱。在實(shí)際的Web項目中編寫處理程序的時候,可以省去程序集名稱。

  現(xiàn)在這個條目將所有的壓縮文件請求轉(zhuǎn)發(fā)給新的處理程序,因此立即將請求重定向到“Access Denied”頁面。即使在本例中跳過該IIS條目,它仍然會照常工作,因為這些事情都交由我們的處理程序了。 然而,我們想要的效果是讓系統(tǒng)在判定匿名用戶訪問非法的ZIP 文件之前,首先把他們導(dǎo)航至登錄頁面。

  如果檢查框架目錄中的web.config文件,就會發(fā)現(xiàn)一列處理常見文件擴(kuò)展名用于ASP.NET的處理程序。定義這個文件中的部分的處理程序決定了IIS如何恰當(dāng)?shù)剞D(zhuǎn)發(fā)ASPX頁面、ASMX Web 服務(wù)以及所有其他文件。 這個處理程序列表還定義了哪些文件擴(kuò)展名是禁用的,例如*.config。事實(shí)上,可以利用一個稱為HttpForbiddenHandler的處理程序來禁用所有以擴(kuò)展名.config結(jié)尾的文件,并自動顯示一個“HTTP 403error Forbidden :Access is denied ”頁面。

  所以您可能問,無什么不只用Microsoft提供的處理程序來處理壓縮文件呢? 答案是,當(dāng)然可以用,不過我們需要自己的“access denied”頁面,這樣通過定制我們自己的拒絕頁面,就能跟我們的網(wǎng)站風(fēng)格保持一致。在某些情況下,我們還想為用戶提供更多的信息,甚至向管理員發(fā)送“未經(jīng)授權(quán)的嘗試”類電子郵件。

  這里只是防止下載所有的壓縮文件,但是我們實(shí)際想要做的是什么?對了,我們要取得從我們站點(diǎn)上文件下載方式的絕對控制權(quán)。我們不想讓用戶直接瀏覽壓縮文件。通過表結(jié)構(gòu),我們可建立一個項目、用戶列表,以及每個用戶購買產(chǎn)品的關(guān)系表。因此如果我們有一個用戶名和一個產(chǎn)品序列號,就可以通過一個簡單的數(shù)據(jù)庫查詢來判斷這個用戶是否購買了這個產(chǎn)品。同時,我們還想讓用戶只需單擊一個鏈接就能啟動查詢并確定是否被允許下載文件。 這些功能的確非常令人向往。

內(nèi)容導(dǎo)航

  九、控制下載

  下面,我們開始講述如何編寫一個用于某些文件請求的處理程序,以及該處理程序的安裝方法。我們的處理程序的功能很簡單,它只是將請求重定向到其他地方而已。ASP.NET還提供了另外一種文件擴(kuò)展名即ASHX,它無需安裝到web.config文件中。我們可以創(chuàng)建一個以這個擴(kuò)展名結(jié)尾的類,來實(shí)現(xiàn)IHttpHandler接口,并就直接導(dǎo)航至該類。實(shí)際上它與一個頁面非常類似,只是它不會使用Web表單和Code-Behind類,所以它是一種更加簡潔的方案。

  現(xiàn)在,我們創(chuàng)建一個新的處理程序稱為Download.ashx,并讓用戶瀏覽到該處理程序的位置,同時在QueryString參數(shù)中規(guī)定一些信息。下面的URL就是下載鏈接:

  ~/Downloads/Download.ashx?Product=101

  這個URL表示下載與產(chǎn)品101有關(guān)的文件。用戶或者鏈接可以訪問上述URL來試圖下載一個文件,這時,該處理程序的ProcessRequest方法就會執(zhí)行。

  利用標(biāo)準(zhǔn)Forms身份驗證對用戶身份進(jìn)行驗證,這樣就能訪問在我們站點(diǎn)上下文中的User對象。請記住,HTTP上下文會傳遞給該處理程序的ProcessRequest方法,所以能訪問到所需的內(nèi)容。對象User允許我們獲得使用User.Identity.Name的授權(quán)用戶的名稱,還有,我們還可以使用該方法訪問User表中的用戶。訪問用戶的名稱,我們要使用User.Identity.IsAuthenticated的值來檢查他們是否已經(jīng)過身份認(rèn)證,如果沒有,將其重定向到“access denied”。此外,我們還要訪問請求的產(chǎn)品號碼,代碼如下所示:



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

context.Request.QueryString["Product"]

  這樣,我們就取得了產(chǎn)品號碼和用戶名。 有了這兩者,我們就可以訪問UserProducts表并確定這個用戶是否購買過這個產(chǎn)品。此外,這個表還存儲有該產(chǎn)品的文件名。

  既然有了用戶名和產(chǎn)品號碼,并通過它們確定除了用戶購買情況。如果該用戶沒有購買相應(yīng)的產(chǎn)品,我們就將其重定向到前面的處理程序,并返回一個訪問拒絕頁面。為簡潔起見,我們將其重定向到一個告知他們還沒有購買過此產(chǎn)品的頁面,并告知如何進(jìn)行購買。

  如果確定該用戶購買了這個產(chǎn)品,可以通過ProductFileName字段了解該用戶可以查看哪些文件。這里,我們沒有存儲完整的路徑,只是存儲了文件名。如果需要,我們可以從web.config中的設(shè)置來獲得該文件夾,所以最終獲得了完整的文件路徑和名稱,并授權(quán)下載。 下面我們通過稱為StartDownload方法來完成此任務(wù):



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

private void StartDownload(
       HttpContext context,
string downloadFile)
   {
         context.Response.Buffer
= true;
         context.Response.Clear();
         context.Response.AddHeader(
            
"content-disposition",
            
"attachment; filename=" + downloadFile);
         context.Response.ContentType
=
            
"application/zip";
         context.Response.WriteFile(
            
"~/Downloads/Files/" + downloadFile);
   }

  這里的ProcessRequest方法會調(diào)用StartDownload方法,完整的Download.ashx代碼如下所示:



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

<%@ WebHandler Language="C#" Class="Download" %>
using System;
using System.Web;
public class Download : IHttpHandler
{
  
public void ProcessRequest (HttpContext context)
   {
      
if (context.User.Identity.IsAuthenticated)
      {
        
if(context.Request.QueryString["Product"] != null
            
&& context.Request.QueryString["Product"] != "")
         {
            
int productID = Convert.ToInt16(
               context.Request.QueryString[
"Product"]);
            
string userName = context.User.Identity.Name;
            UserProduct product
= UserProductFactory.GetProductByUser(
               userName, productID);
            
if(product != null)
               StartDownload(product.FileName);
            
else
               context.Response.Redirect(
                  
"~/Downloads/Files/AccessDenied.aspx");
         }
      }
   }

  
public bool IsReusable
   {
      
get
      {
        
return false;
      }
   }
  
private void StartDownload(string downloadFile)
   {
      context.Response.Buffer
= true;
      context.Response.Clear();
      context.Response.AddHeader(
        
"content-disposition",
        
"attachment; filename=" + downloadFile);
      context.Response.ContentType
= "application/zip";
      context.Response.WriteFile(
        
"~/Downloads/Files/" + downloadFile);
   }
}

  這個方法會收到文件的名稱以及HttpContext。由此處,我們將清空響應(yīng)緩沖區(qū),設(shè)置一個新的頭部,然后設(shè)置內(nèi)容類型。最后,使用WriteFile方法輸出該文件,最終用戶會收到一個文件保存或打開窗口。

  注意,使用WriteFile會輸出ZIP 文件,而是要Response.Redirect則會把用戶重定向到訪問拒絕頁面。使用這種技術(shù)的時候,聰明的用戶可以繞過安全檢查而直接導(dǎo)航至Download.ashx文件。但即使它們設(shè)法直接瀏覽到ZIP 文件,也會被FileDenialHandler處理程序重定向到訪問拒絕頁面。

  注意這兩種類型處理程序的區(qū)別,一個是可以放在外部組件中的標(biāo)準(zhǔn)C#(或者VB.NET)類,如果您需要編寫可重用的處理程序的時候,這種類型比較理想,因為您可以把它們編譯成一個動態(tài)鏈接庫,并在不同的站點(diǎn)之間分享。當(dāng)然,我們需要在web.config文件中對它們進(jìn)行注冊。對于ASHX類型的處理程序,可以像ASPX頁面一樣添加到站點(diǎn)中。事實(shí)上,我們可以使用其他技術(shù)來完成類似Download.ASHX的功能,但是ASHX處理程序是更加簡潔的解決方案。

  十、小結(jié)

  使用ASP.NET保護(hù)文件下載的所有方法中,利用HTTP處理程序是最重要的一種。通過與其他技術(shù)相結(jié)合,我們不僅能夠防止非授權(quán)用戶下載文件,還能在處理用戶下載文件試圖時獲得絕對控制權(quán),希望本文的內(nèi)容對您能夠有所幫助。

相關(guān)文章

  • asp.net 安全、實(shí)用、簡單的大容量存儲過程分頁

    asp.net 安全、實(shí)用、簡單的大容量存儲過程分頁

    昨晚研究到2點(diǎn)多,對網(wǎng)絡(luò)上主流的分頁存儲過程大體看了一遍,但對安全以及如何使用很多文章都沒有過多的提及,而我要在這些文章的基礎(chǔ)上總結(jié)出一個比較實(shí)用的分頁存儲過程,方便大家在以后的項目中使用。
    2009-06-06
  • CodeFirst從零開始搭建Asp.Net Core2.0網(wǎng)站

    CodeFirst從零開始搭建Asp.Net Core2.0網(wǎng)站

    這篇文章主要為大家詳細(xì)介紹了CodeFirst從零開始搭建Asp.Net Core2.0網(wǎng)站的詳細(xì)過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • .net中string無重復(fù)數(shù)字的實(shí)現(xiàn)方法

    .net中string無重復(fù)數(shù)字的實(shí)現(xiàn)方法

    今天做項目的時候,用js獲得了勾選的checkbox放在了hiddenfile里,然而hiddenfile的值變成了類似:“1,1,1,3,3,2,4,5,5,5”,后臺獲取的時候,只保留不重復(fù)的數(shù)字,于是想了一想;直接上代碼了。
    2013-04-04
  • 使用母版頁時內(nèi)容頁如何使用css和javascript

    使用母版頁時內(nèi)容頁如何使用css和javascript

    由于網(wǎng)站的主要頻道頁和列表頁的頭部和底部都是一樣的,如果將每個頁面放在單獨(dú)的頁面中,當(dāng)頭部和底部需要更改時維護(hù)量太大。于是想把頭部和底部做成母版頁,頻道頁和列表頁的具體內(nèi)容放到內(nèi)容頁中。這樣當(dāng)頭和底需要改動時,只要修改一下母版頁就可以了。
    2009-08-08
  • 手把手教你在.NET中創(chuàng)建Web服務(wù)實(shí)現(xiàn)方法

    手把手教你在.NET中創(chuàng)建Web服務(wù)實(shí)現(xiàn)方法

    這篇文章主要介紹了.NET中創(chuàng)建Web服務(wù)實(shí)現(xiàn)方法,有需要的朋友可以參考一下
    2013-12-12
  • Asp.net TreeView來構(gòu)建用戶選擇輸入的方法 推薦

    Asp.net TreeView來構(gòu)建用戶選擇輸入的方法 推薦

    選擇優(yōu)于輸入,這是一般人的共識,面對繁多的數(shù)據(jù),提供良好的選擇界面,一方面增強(qiáng)用戶的界面體驗,一方面也提高了數(shù)據(jù)的準(zhǔn)確性,更節(jié)省了用戶的寶貴時間。
    2009-12-12
  • Asp.Net Core利用xUnit進(jìn)行主機(jī)級別的網(wǎng)絡(luò)集成測試詳解

    Asp.Net Core利用xUnit進(jìn)行主機(jī)級別的網(wǎng)絡(luò)集成測試詳解

    這篇文章主要給大家介紹了關(guān)于Asp.Net Core利用xUnit進(jìn)行主機(jī)級別的網(wǎng)絡(luò)集成測試的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們來一起看看吧
    2018-12-12
  • .NET core高性能對象轉(zhuǎn)換示例代碼

    .NET core高性能對象轉(zhuǎn)換示例代碼

    這篇文章主要給大家介紹了關(guān)于.NET CORE高性能對象轉(zhuǎn)換的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • ZKEACMS for .Net Core深度解析

    ZKEACMS for .Net Core深度解析

    ZKEACMS.Core 是基于 .Net Core MVC 開發(fā)的開源CMS,這篇文章主要為大家深度解析了ZKEACMS for .Net Core,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • 淺析ASP.NET萬能JSON解析器

    淺析ASP.NET萬能JSON解析器

    這篇文章主要是對ASP.NET萬能JSON解析器進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12

最新評論

新竹县| 枣阳市| 徐闻县| 饶河县| 霞浦县| 武义县| 郓城县| 阿拉善左旗| 屏南县| 江门市| 福清市| 肇东市| 左权县| 盘锦市| 黄梅县| 灯塔市| 通化市| 左云县| 兴化市| 永登县| 常州市| 津南区| 安乡县| 长白| 香河县| 孝义市| 瓦房店市| 石首市| 铜山县| 昭觉县| 甘洛县| 富平县| 女性| 丰顺县| 东海县| 卓资县| 湄潭县| 介休市| 大新县| 山阴县| 柘荣县|