Asp.net
ASP.NET 路由:標記之間的文字子段,並使用文字子段中的字元路由值
我問的原因是因為 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 參數中刪除下劃線前綴。如果您願意,您甚至可以編寫一個動作過濾器來為您執行此操作。帶來不便敬請諒解。