Получить текущий URL страницы без параметров запроса - помощник Razor Html?

Есть ли метод в Razor, который возвращает URL-адрес текущих страниц без параметров запроса.

Мне нужно вставить его в HTML-помощник, который я создал как строку.

@Url, похоже, не работает, и если я делаю .ToString(), я просто получаю пространство имен LOLLL

Использование бритвы:

<th width="100%" @Html.SortTableClickEvent(@Url.ToString(), "Name")>

Html helper:

    public static MvcHtmlString SortTableClickEvent(this HtmlHelper html, string url, string column)
    {
        StringBuilder sortingPropertiesObject = new StringBuilder();
        sortingPropertiesObject.Append("var properties = new James.prototype.Table.SortingProperties();");
        sortingPropertiesObject.Append("properties.url = \"" + url + "\"");
        sortingPropertiesObject.Append("properties.colName = \"" + column + "\"");

        string clickEvent = "onclick = James.Table.SortByColumn(properties, this);";

        return MvcHtmlString.Create(sortingPropertiesObject + clickEvent);
    }

Что выводит на мой html:

<th width="100%" onclick='James.Table.SortByColumn("Name",' this);="" properties.colname="Name" james.prototype.table.sortingproperties();properties.url="System.Web.Mvc.UrlHelper" properties="new" var="">
            Name
        </th>

Ответ 1

Для этого вы можете использовать метод Request.Url.GetLeftPart. Если ваш URL-адрес говорит

http://the-site.com/controller/action?param=1

Выполнение Request.Url.GetLeftPart(UriPartial.Path) должно давать

http://the-site.com/controller/action

В коде, который может выглядеть так:

<th width="100%" @Html.SortTableClickEvent(@Request.Url.GetLeftPart(UriPartial.Path), "Name")>

Ответ 2

Без запроса:

Request.Url.GetLeftPart(UriPartial.Path)

С запросом

Request.Url.PathAndQuery

Ответ 3

Это то, что я использовал, который также работает, чтобы избавиться от НИЧЕГО права на действие.

 public static string GetParameterlessPath(ActionExecutingContext filterContext)
    {
        return GetParameterlessPath(filterContext.ActionDescriptor.ActionName,
            VirtualPathUtility.ToAppRelative(filterContext.HttpContext.Request.Path));
    }

    public static string GetParameterlessPath(string action, string relativeUrl)
    {
        return  relativeUrl.Contains(action) 
             ? relativeUrl.Substring(0, relativeUrl.LastIndexOf(action))+action 
             : relativeUrl;
    }

Это, очевидно, статический метод, но я поместил его в свой ActionFilter, откуда я получаю ActionExecutingContext. Если у вас есть действие и relativeUrl (или любой URL-адрес), этот нижний метод должен работать для вас.