Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在没有查询字符串或Id部分的情况下获取URL?_C#_Url_Httpcontext - Fatal编程技术网

C# 如何在没有查询字符串或Id部分的情况下获取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

假设我的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/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映射到控制器和操作之后发生的吗?