2012-01-15 46 views
2

是否有可能不使用QueryString值?或&在網址?Request.QueryString沒有?或可能?

我想有這樣的:

http://www.colors.com/Red 

string id = Request.QueryString["?"]; 

以下代替:

http://www.colors.com/?ColorID=Red 

string id = Request.QueryString["ColorID"]; 
+2

你的意思是URL重寫,有多種方法可以做到這一點,這裏是另一篇文章上問題:http://stackoverflow.com/questions/2375256/url-rewriting-in-net-mvc – 2012-01-15 20:54:22

+2

URL路由http://msdn.microsoft.com/en-us/library/cc668201.aspx – 2012-01-15 20:55:16

+0

請注意' URL重寫「和」URL路由「是兩個不同的東西,最終完成相同的總體目標。他們的經營方式存在細微的差異,這對您而言可能並非重要。 – 2012-01-15 20:58:33

回答

3

號查詢字符串由?的外觀定義。

您提供的示例會將用戶重定向到一個目錄。

-1

聽起來你可能想要實現一個MVC網站。

查看this MSDN documentation瞭解更多信息。

+0

MVC與這些網址的構建無關。它的真正MVC是以它爲中心的,但這並不意味着這個概念本身完全屬於MVC。 – 2012-01-15 22:50:25

+0

OP並沒有詢問有關url的構造*,他們詢問有關*訪問URL的信息。這個假設是他們希望以所示的形式使用URL格式,以便將參數值傳遞給Web應用程序。有了這組信息,MVC是一個完全有效的建議,我會根據問題假設OP不知道的。 – 2012-01-15 22:58:12

+0

@PauliØsterø是正確的。您可以使用routes.MapPageRoute爲OP顯示在「普通的舊ASP.NET」中的模式創建路由。它與MVC無關。 – 2012-01-15 23:31:16

1

如果你想仍然能夠通過Querystring訪問color-id的值,那麼你應該看看重寫。這可能是由於您無法更改的遺留代碼或與第三方代碼進行交互的其他形式。好處或Rewriting是最終被執行的代碼不知道url被重寫前的樣子,它可以繼續工作,就好像有一個名爲ColorID的Querystring參數。

最簡單的形式,你需要調用的HttpContext的重寫方法,這將在內部旋轉了一個新的要求執行,即其URL匹配,而用戶注意到的任何代碼。其中一個警告可能是,你的遺留代碼不知道如何在菜單和東西中呈現正確的鏈接,所以你會繼續像?ColorID=Red這樣的網址,它應該只是Red

在IIS 7及更高版本中,有一個內置過濾器,您可以在其中編寫規則和模式,因此無需編寫自己的代碼來匹配傳入請求並調用HttpContext.Rewrite。在MSDN上閱讀更多關於here的信息。

現在,路由完全是另外的事情。它是一個Asp.net功能,不能在現有的遺留代碼之上工作,但需要與它一起使用。這意味着執行的代碼需要知道請求已被路由到它。這當然有很多好處,你正在寫一個新的系統,那麼我肯定會推薦使用路由超過重寫。有一個good article here有關分歧而一些問題也涉及到專題:

+0

+1 - 用於路由 – Pankaj 2012-02-22 18:29:54

相關問題