ASP.NET MVC - извлечение параметра из URL - PullRequest
54 голосов
/ 15 февраля 2011

Я пытаюсь извлечь параметры моего URL, что-то вроде этого.

/ Администрирование / Клиент / Редактировать / 1

извлечение: 1

/ Администрирование / Продукт / Редактировать / 18? = Разрешено верно

выдержка: 18? Позволено = верно

/ Администрирование / Product / Create? Разрешено = правда

извлечение: ? Позволено = верно

Кто-то может помочь? Спасибо!

Ответы [ 6 ]

88 голосов
/ 15 февраля 2011

Обновление

RouteData.Values["id"] + Request.Url.Query

Будет соответствовать всем вашим примерам


Не совсем ясно, чего вы пытаетесь достичь. MVC передает параметры URL для вас через привязку модели.

public class CustomerController : Controller {

  public ActionResult Edit(int id) {

    int customerId = id //the id in the URL

    return View();
  }

}


public class ProductController : Controller {

  public ActionResult Edit(int id, bool allowed) { 

    int productId = id; // the id in the URL
    bool isAllowed = allowed  // the ?allowed=true in the URL

    return View();
  }

}

Добавление отображения маршрута в ваш файл global.asax.cs до того, как по умолчанию будет обрабатываться / Administration / part. Или, возможно, вы захотите заглянуть в области MVC.

routes.MapRoute(
  "Admin", // Route name
  "Administration/{controller}/{action}/{id}", // URL with parameters
  new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

Если вам нужны необработанные данные URL, тогда вы можете использовать одно из различных свойств URL и запроса, доступных в действии вашего контроллера

string url = Request.RawUrl;
string query= Request.Url.Query;
string isAllowed= Request.QueryString["allowed"];

Звучит так, будто Request.Url.PathAndQuery может быть тем, что вы хотите.

Если вы хотите получить доступ к необработанным опубликованным данным, вы можете использовать

string isAllowed = Request.Params["allowed"];
string id = RouteData.Values["id"];
6 голосов
/ 03 сентября 2015
public ActionResult Index(int id,string value)

Эта функция получает значения из URL После этого вы можете использовать функцию ниже

Request.RawUrl - возврат полного URL текущей страницы

RouteData.Values - возврат коллекции значений URL

Request.Params - возвращаемые коллекции значений имен

1 голос
/ 15 февраля 2011

Список этих параметров можно получить в объекте ControllerContext.RoutValues ​​в виде пары ключ-значение.

Вы можете сохранить его в некоторой переменной и использовать эту переменную в своей логике.

0 голосов
/ 09 января 2018

Я написал этот метод:

    private string GetUrlParameter(HttpRequestBase request, string parName)
    {
        string result = string.Empty;

        var urlParameters = HttpUtility.ParseQueryString(request.Url.Query);
        if (urlParameters.AllKeys.Contains(parName))
        {
            result = urlParameters.Get(parName);
        }

        return result;
    }

И я называю это так:

string fooBar = GetUrlParameter(Request, "FooBar");
if (!string.IsNullOrEmpty(fooBar))
{

}
0 голосов
/ 15 февраля 2011

Я не знаком с ASP.NET, но, полагаю, вы можете использовать функцию split , чтобы разделить ее в массив, используя разделитель / as, затем захватите последний элемент в массиве (обычно длина массива -1), чтобы получить нужный фрагмент.

Хорошо, похоже, это не работает для всех примеров.

А как насчет регулярного выражения?

.*(/|[a-zA-Z]+\?)(.*)

тогда получите последнее подвыражение (.*), я думаю, что это $+ в .Net, я не уверен

0 голосов
/ 15 февраля 2011

Для того, чтобы получить значения ваших параметров, вы можете использовать RouteData.Почему вам нужно «извлечь» их в первую очередь?Вы должны иметь действие как: public ActionResult Edit(int id, bool allowed) {}

...