C# 如何在没有查询字符串或Id部分的情况下获取URL?
假设我的URL是:C# 如何在没有查询字符串或Id部分的情况下获取URL?,c#,url,httpcontext,C#,Url,Httpcontext,假设我的URL是: 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/empl
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”])
来获取它(context是HttpContext),但它没有按照我想要的方式工作,因为它也包含了索引操作。比如,如果Url是“我想要”/app/company/“不是”/app/company/Index”。我可以随时检查动作是否为索引,但对我来说,这感觉就像是一种“代码气味”
同样,使用
context.Request.Url.AbsolutePath
也不起作用,因为它返回“/app/company/employees/5”(它返回带有Id的路径)看起来您从Url需要的只有两件事情是操作
和控制器
,如果操作是“索引”,则不需要它。在这种情况下,我相信你做得对。这是我在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中
我希望这有助于索引是你的行动,如果你不想要这个行动,那么你为什么要附加它?为什么不使用主机名+/app/company呢fixed@maytham-问题是他应该如何获得
/app/company
?这对定制路线有效吗?或者,这是在url映射到控制器和操作之后发生的吗?