假设我的网址是:
https://www.mywebsite.com/app/company/employees/5
https://www.mywebsite.com/app/company/employees?id=5&name=jack
https://www.mywebsite.com/app/company/employees/5?clockId=1
我正在寻找一种获取“基本”路径或任何所谓路径的方法。就像所有“基本”路径都是“ / app / company / employees”一样,没有“ / 5”部分或“?id = 5&name = jack”或“ / 5?clockId = 1”部分。
我正在使用string.Join("/", context.Request.ApplicationPath, context.Request.RequestContext.RouteData.Values["controller"], context.Request.RequestContext.RouteData.Values["action"])
来获取它(上下文是HttpContext),但是它并没有按照我想要的方式工作,因为它也包含Index动作。就像Url是“ https://www.mywebsite.com/app/company”一样,我希望“ / app / company /”而不是“ / app / company / Index”。我可以随时检查操作是否为Index,但对我来说感觉像是一种“代码异味”。
使用context.Request.Url.AbsolutePath
也不起作用,因为它返回“ / app / company / employees / 5”(返回带有ID的路径)
答案 0 :(得分:0)
看起来,URL中仅需要的两件事是action
和controller
,如果操作是“索引”,则不需要它。在这种情况下,我认为您做对了。这是我在ASP.NET MVC
项目中使用的一段经过修改的代码:
string actionName = this.ControllerContext.RouteData.Values["action"].ToString();
string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString();
if (actionName.Equals("index", StringComparison.InvariantCultureIgnoreCase))
{
actionName = string.Empty;
}
string result = $"/{controllerName}/{actionName}";
还有一件事要提到:“区域”。一旦我在拥有它们的网站上工作,因此如果您的网站使用“区域”方法,它们也可能会出现在您的URL中。
我希望对您有帮助