Как получить URL без строки запроса или идентификатора? - PullRequest
0 голосов
/ 26 апреля 2019

Скажем, мои 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 / employee» для всех, без части «/ 5» или «? Id = 5 & name = jack» или «/ 5? ClockId = 1» parts.

Я использовал 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 / "not" / app / company / Index ". Я всегда могу проверить, является ли действие Index или нет, но оно выглядит как" Код запаха "для меня.

Также использование context.Request.Url.AbsolutePath также не работает, так как возвращает «/ app / company / employee / 5» (возвращает путь с идентификатором)

1 Ответ

1 голос
/ 26 апреля 2019

Похоже, что для URL нужны только две вещи: action и controller, и если действие "index", оно вам не нужно.В этом случае я считаю, что вы делаете все правильно.Это немного измененный фрагмент кода, который я использовал в проекте 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, если ваш веб-сайт использует подход «области».

Надеюсь, это поможет 100

...