[英]How to get the URL of the Action without parameters in ASP.NET MVC
[英]Get MVC Route Path without url parameters
在我的MVC4項目中,我有一個URL http://domain.com/ {controller} / {action} /。 為了確定哪些頁面用戶訪問並獲得當前活動的菜單項,我使用像HttpContext.Request.Url.AbsolutePath.ToLower()
這樣的網址路徑
但是,在某些情況下,路徑是/ {controller} / {action} / {id}等,實際上是/ {controller} / {action} /?{id} = value 。
如果參數被路由規則覆蓋,如何不帶參數獲取/ {controller} / {action} / ?
謝謝。
您僅對控制器和動作名稱感興趣嗎?
如果是這樣,請使用控制器的RouteData屬性。
您可以像這樣使用它:
public ActionResult Index()
{
var controller = this.RouteData.Values["controller"];
var action = this.RouteData.Values["action"];
}
如何在當前路線之前添加一條新路線,就像這樣。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
新路線將是這樣-
routes.MapRoute(
name: "**Withoutparam**",
url: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
請注意,您需要在RouteConfig.cs中的當前路由之前添加此路由 。 這是因為MVC從頂部到底部開始搜索RouteConfig文件中的路由。 一旦找到任何匹配的路由,它將停止進一步搜索。 因此,對於您的問題,當有沒有參數的路線時,它將選擇“ Withoutparam”路線。
從下面的評論中我可以理解。 在每種情況下,您都需要不帶id的url。 如果是這樣,那么我認為您可以這樣做:-
var url = new StringBuilder();
string[] partOfUrl = HttpContext.Request.Url.AbsolutePath.ToLower().split('/');
for(int count = 0; count< (partOfUrl.Length - 1); count++)
{
url.Append(partOfLength[count] + "/")
}
使用url.ToString()作為所需的URL。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.