簡體   English   中英

IIS7 文件映射 -.asax、.ashx、.asap

[英]IIS7 file mappings - .asax, .ashx, .asap



IIS 使我們還可以配置 Asp.Net 文件映射。 因此,除了 aspx,IIS 還調用 Asp.Net 運行時,當請求具有以下文件擴展名時:

a).ascx -->.asmx 擴展名用於請求用戶控件。

  • 由於無法直接訪問用戶控件,那么任何人如何以及為什么會向用戶控件發送請求?

b).ashx --> 此擴展名用於 HTTP 處理程序。

• 但是為什么要直接請求一個.ashx 頁面,而不是在配置文件中注冊這個處理程序並在請求具有某些(非ashx)擴展名的文件時調用它呢?

• 此外,由於可以注冊多個 Http 處理程序,如果它們都使用 ashx 擴展,Asp.Net 將如何知道調用哪個處理程序?

• 請求的ashx 文件包含什么? 也許是 Http 處理程序 class 的定義?

• 我知道我們如何注冊 Http 處理程序以在請求非 ashx 頁面時調用,但是我們如何為 ashx 頁面注冊 Http 處理程序?



c).asax --> 此擴展名用於請求全局應用程序文件

• 我們為什么要直接調用 Global.asax?

• 我假設當請求 Global.asax 時,會創建一個從 HTtpApplication class 派生的 object,除了這次沒有 web 頁面處理發生?



謝謝




問 - 除了 Asp.Net 能夠請求 global.asax 進行編譯之外,還有什么其他原因可以選擇直接請求擴展名為 .asax 的文件嗎?


• ashx 文件不必注冊。 它們基本上是一個更簡單的 aspx,當您不需要整個頁面生命周期時。 一個常見的用途是從數據庫中檢索動態圖像。

所以如果我寫一個 Http 處理程序,我應該把它放在一個擴展名為 .ashx 的文件中,Asp.Net 將構建一個 HttpHandler object 類似於它如何構建一個頁面實例 from.aspx 文件?


• 如果黑客確實嘗試請求這些文件之一,您希望發生什么? 您當然不希望 IIS 將其視為文本文件並將您的應用程序的源代碼發送到瀏覽器。

Asp.Net 可以對 .cs、.csproj、.config、.resx、.licx、.webinfo 文件類型做同樣的事情。 即,它將這些文件類型注冊到 IIS 以便它可以明確地阻止用戶訪問這些文件


• 僅僅因為您不希望瀏覽器請求資源,並不意味着您不希望該資源由 asp.net 引擎處理。 這些擴展也是 ASP.Net 為 web 站點 model 站點選擇要編譯的文件的方式。

但是為什么 Asp.Net 也不允許直接請求.cs、.csproj、.config、.resx、.licx、.webinfo 文件呢?



a) 和 c) - 據我所知,這些不用於處理任何外部請求

我的書聲稱這兩個映射在 IIS



我感謝您的幫助

編輯:

b).ashx 擴展名是在配置文件中定義的,它不是 web.config,而是在 machine.config 中

<add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />
http://msdn.microsoft.com/en-us/library/bya7fh0a.aspx

Why use.ashx: The difference is that the .NET class that handles a.ashx reads the Page directive in the.ashx file to map the request to a class specified in that directive. 這使您不必為您擁有的每個處理程序在 web.config 中放置一個顯式路徑,這可能導致非常長的 web.config。

我以為 Http 處理程序 class 是在 .ashx 文件中定義的,但是擴展名為 .ashx 的文件只包含 Page 指令?

因為我不能 100% 確定我是否理解正確:假設我們有十個 Http 處理程序,我們想通過向 IIS7 發出請求來調用。 我假設每個 Http 處理程序都會有特定的.ashx 文件-> 因此,如果對 FirstHandler.asxh 發出請求,那么將調用該文件中指定的處理程序?

另一個編輯:

我必須承認,我仍然對 ashx 擴展有點不確定。

我意識到通過使用它,我們可以例如創建“hey.ashx”頁面,其中 Page 指令將告訴在請求“hey.ashx”時調用哪個 class(Http 處理程序)——因此無需在 5A568F05B3955 中注冊 Z9D4D43DE568F05B3955 處理程序web.config。

但是,如果您以這種方式使用 Http 處理程序,那么它們只會在請求擴展名為 .ashx 的文件時被調用。 因此,如果我希望為具有其他擴展名的文件(例如 .sourceC)調用 Http 處理程序,那么我仍然需要在 web.config 中注冊 Http 處理程序?!

幾點:

  • asmx 文件與 ascx 文件不同。 您將它們用於 web 服務(肥皂)而不是 web 控件。
  • ashx 文件不必注冊。 它們基本上是一個更簡單的 aspx,當您不需要整個頁面生命周期時。 一個常見的用途是從數據庫中檢索動態圖像。
  • 如果黑客確實嘗試請求這些文件之一,您希望發生什么? 您當然不希望 IIS 將其視為文本文件並將您的應用程序的源代碼發送到瀏覽器。
  • 僅僅因為您不期望來自瀏覽器的資源請求,並不意味着您不希望 asp.net 引擎處理該資源。 這些擴展也是 ASP.Net 為 web 站點 model 站點選擇要編譯的文件的方式。

a) 和 c) - 據我所知,這些不用於處理任何外部請求

b) 默認情況下,它將查找具有請求的路徑/名稱的 .ashx 文件。 這使得將處理程序添加到 web 站點變得非常容易,無需進行任何配置。

更新:在你還提到 asmx. 我的看法是這本書解釋了一些 ajax 相關功能,並附有一些評論:

  • Asp.net 不允許發出指向.ascx 的請求。
  • 您可以向 web 服務 (.asmx) 發出請求以獲取信息。
  • 有一些內置功能可以幫助您完成上述操作。

a) .ascx 不能直接訪問,因為默認處理程序是 class System.Web.HttpForbiddenHandler

<add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" />

.asmx 文件可以直接調用,它們是 web 方法(盡管您通常必須發出 POST 請求,除非您在 web.config 中指定允許 GET

b) .ashx 擴展名在配置文件中定義的,它不是 web.config,而是在 machine.config 中

<add path="*.ashx" verb="*" type="System.Web.UI.SimpleHandlerFactory" validate="True" />

http://msdn.microsoft.com/en-us/library/bya7fh0a.aspx

Why use.ashx: The difference is that the .NET class that handles a.ashx reads the Page directive in the.ashx file to map the request to a class specified in that directive. 這使您不必為您擁有的每個處理程序在 web.config 中放置一個顯式路徑,這可能導致非常長的 web.config。

--

c) Global.asax:我不使用 gloabl.asax,我寧願使用非常優雅的 HttpModule 解決方案,但它可能是為具有 global.asax 文件的舊站點設置的。

要明確清除您可能對 asp.net 對這些請求所做的任何混淆,請檢查 web.config 中的:

%systemroot%\Microsoft.NET\Framework\v2.0.50727\CONFIG

如您所見(在下面發布),asp.net 幾乎排除了您不確定是否接受特殊處理的所有文件。 注意有 *.cs、*.acsx、*.asax。

<add path="*.asax" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.ascx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.master" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.skin" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.browser" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.sitemap" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.dll.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True"/>
<add path="*.exe.config" verb="GET,HEAD" type="System.Web.StaticFileHandler" validate="True"/>
<add path="*.config" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.cs" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.csproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.vb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.vbproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.webinfo" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.licx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.resx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.resources" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.mdb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.vjsproj" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.java" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.jsl" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.ldb" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.ad" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.dd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.ldd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.sd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.cd" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.adprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.lddprototype" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.sdm" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.sdmDocument" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.mdf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.ldf" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.exclude" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>
<add path="*.refresh" verb="*" type="System.Web.HttpForbiddenHandler" validate="True"/>

此外,請記住 IIS 可能未配置為 map 對 ASP.NET 管道的某些請求(MIME 類型)。

那么有沒有人有 mime.types 文件 for.ashx 擴展名的例子,例如我有 aspx ->

 application/aspx                                aspx

我試過這個,但它不起作用:

application/ashx                                ashx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM