2012-01-21 43 views
4

好吧,我有一個巨大的問題,給這個正確的標題,我的藉口。IIS上ASP.NET頁面的Restfull url

無論如何,我已經開始慢慢看待Web和ASP.NET了,我是C#開發人員,但過去5年左右我主要使用Windows應用程序,並不是我沒有觸及Web因爲那時候,但是這是作爲Web服務(Restfull以及醜陋的SOAP服務),我也使用了更多的「原始」Web請求。

但我一直沒有與IIS或ASP.NET工作。

我想要做的是使用一種網頁風格,我最好用「像休息」一樣描述網頁,因此是「Restfull網址」標題。因爲我認爲大多數人都認爲這樣的網址是:

http://example.com/item/ 
http://example.com/item/23/ 

等等。這並不是說他們要像她那樣,但是我想用這樣的URL,而不是

http://example.com/item?id=23 

我知道的潛臺詞這樣做,但我已經沒有任何運氣在他們的代碼庫找到它。

現在據我所知,我可以實現一些IHttpHandler的,但至少對於我所見過的例子來說,他們將頁面源代碼寫回代碼中,並且我仍然有母版頁等。使用,而不是接管所有這些東西我的自我,我真的只是有點想要路由http://example.com/item/23/http://example.com/item並要求具有ID 23的項目...

我希望這是有道理的所有>。 < ...而且有人有一些更好的例子,我可以找到。

+0

您使用哪種.net框架和IIS版本? – DotNetUser

+0

我實際上並不是100%確定,部署有點遠,所以我認爲那時我們正在討論.NET 4.0和IIS 7.5。 這就是我在當地的atm。但是我向該公司發出了一個支持請求,該請求旨在承載此請求並請求.NET/OS/IIS版本信息。 但現在假設使用.NET 4.0和IIS 7.5。 – Jens

+0

我有機會獲得IIS 7和.NET 4.0(Windows 2008服務器)。根據託管公司。 – Jens

回答

2

因此,這裏是你的選項 -

對於.NET 3.5 SP1框架,IIS7,您可以使用ASP。網絡路由功能有你提到的MVC風格的URL應該創建一個實現IRouteHandler接口的自定義路由處理程序,如How to: Use Routing with Web Forms所述,並在Global.asax的Application_Start方法中註冊你的路由規則。爲了您的例子,你可以這樣註冊

routes.Add("ItemRoute", new Route 
    (
    "item/{itemId}", 
    new CustomRouteHandler("~/item.aspx") 
    )); 

的路線,然後你可以通過檢查請求上下文項

requestContext.HttpContext.Items["itemId"] 

爲.NET框架4 MVC你不要在你的路由item.aspx頁面訪問的itemId必須創建一個自定義處理程序,你可以直接使用

routes.MapPageRoute("ItemRoute", "item/{itemId}", "~/item.aspx"); 

你在global.asax中的Application_Start方法。

此鏈接解釋更多關於Routing

3

你可以使用Routing來實現這個功能,這裏有一個指向MSDN blog, The .Net Endpoint - Using Routes to Compose WCF WebHttp Services的鏈接,它可以幫助你開始。

+0

嗨,這似乎並不像是我想要實現的,就我從該系列中可以看到的,他們最終將使用T4模板來生成輸出,我真的只想使用ASP.NET渲染器或者您可能稱之爲的模板。 其餘的大部分似乎都談論WCF,它根本不是我想要的。 – Jens

+0

好吧,就這樣,這只是一個蹩腳的例子,Routes確實看起來很有用,另一個例子提供了一個更好的例子。 – Jens

+0

我在幾個WCF項目上使用了路由,並且發現它簡單而且簡潔,沒有多少處理和工作。 – Lloyd

1

實現此目的的一種方法是使用URL重寫。

如果你打算舉辦在Internet Information Services 7.x的Web應用程序,你可以利用IIS URL重寫的模塊:

URL重寫只是映射一個不友好的,普通的網址,這是一個友好的編程友好的URL來檢查GET參數。

例如:

http://yourdomain.com/item/48 => http://yourdomain.com/Items.aspx?Id=48