【问题标题】:How to get the URL without the Query String or the Id part?如何在没有查询字符串或 Id 部分的情况下获取 URL?
【发布时间】:2019-04-25 21:13:27
【问题描述】:

假设我的网址是:

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),但它不能按我想要的方式工作,因为它也包含索引操作。就像如果 URL 是“https://www.mywebsite.com/app/company”我想要“/app/company/”而不是“/app/company/Index”。我总是可以检查该操作是否为索引,但对我来说感觉就像是一种“代码味道”。

同样使用 context.Request.Url.AbsolutePath 也不起作用,因为它返回“/app/company/employees/5”(它返回带有 Id 的路径)

【问题讨论】:

  • 索引是您的操作,如果您不想要该操作,那么为什么要附加它?
  • 为什么不取主机名 + /app/company 是固定的
  • @maytham-ɯɐɥʇʎɐɯ 问题是他应该如何得到/app/company
  • 这适用于自定义路线吗?或者这是否发生在 url 被映射到控制器和操作之后?

标签: c# url httpcontext


【解决方案1】:

看起来您需要从 URL 获得的唯一两件事是 actioncontroller,如果操作是“索引”,则您不需要它。在这种情况下,我相信你做对了。这是我在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 中。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 2017-07-20
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多