Asp.net

ASP.NET 路由:標記之間的文字子段,並使用文字子段中的字元路由值

  • March 5, 2012

我問的原因是因為 IIS 保護某些 ASP.NET 文件夾,如 Bin、App_Data、App_Code 等。即使 URL 沒有映射到實際的文件系統文件夾,IIS 也會拒絕路徑段等於其中之一的 URL提到的名字。

這意味著我不能有這樣的路線:

{controller}/{action}/{id}

…其中 id 可以是任何字元串,例如

Catalog/Product/Bin

因此,我願意更改路由,而不是禁用此安全措施,在 id 之前使用後綴,如下所示:

{controller}/{action}_{id} // e.g. Catalog/Product_Bin
{controller}/{action}/_{id} // e.g. Catalog/Product/_Bin

但是如果 id 包含新的分隔符,這些路由將不起作用,在這種情況下為 _,例如

// These URL won't work (I get 404 response)
Catalog/Product_Bin_
Catalog/Product/_Bin_
Catalog/Product/__Bin

為什麼?我不知道,對我來說似乎是一個錯誤。我怎樣才能使這些路由工作,其中 id 可以是任何字元串?

好的,我有一個確定的答案。是的,這是一個錯誤。然而,在這一點上,我很遺憾地說我們沒有計劃修復它,原因有兩個:

  • 這是一個突破性的變化,可能很難注意到這一點。
  • 有一個簡單的解決方法。

您可以做的是將 URL 更改為不包含下劃線:

{controller}/{action}/_{id}

然後添加一個路由約束,要求 ID 參數以下劃線字元開頭。

然後在您的操作方法中,您從 id 參數中刪除下劃線前綴。如果您願意,您甚至可以編寫一個動作過濾器來為您執行此操作。帶來不便敬請諒解。

引用自:https://stackoverflow.com/questions/4318373