web-dev-qa-db-fra.com

ASP.NET MVC - Paramètre d'extraction d'une URL

J'essaie d'extraire les paramètres de mon URL, quelque chose comme ça.

/ Administration/Client/Éditer/1

extrait: 1

/ Administration/Produit/Éditer/18? Allowed = true

extrait: 18? autorisé = vrai

/ Administration/Produit/Créer? Allowed = true

extrait: ? allowed = true

Quelqu'un peut aider? Merci!

51
Kim Tranjan

Mettre à jour

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

Correspondra à tous vos exemples


Ce que vous essayez de réaliser n’est pas tout à fait clair. MVC transmet les paramètres d'URL pour vous via la liaison de modèle.

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();
  }

}

L'ajout d'un mappage de route à votre fichier global.asax.cs avant celui par défaut gérera le dossier/administration /. Ou vous voudrez peut-être vous pencher sur les zones MVC.

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

Si vous recherchez les données d'URL brutes, vous pouvez utiliser l'une des propriétés d'URL et de requête disponibles dans l'action de votre contrôleur.

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

Il semble que Request.Url.PathAndQuery pourrait être ce que vous voulez.

Si vous voulez accéder aux données brutes publiées, vous pouvez utiliser 

string isAllowed = Request.Params["allowed"];
string id = RouteData.Values["id"];
85
David Glenn
public ActionResult Index(int id,string value)

Cette fonction récupère les valeurs sous forme d'URL Après cela, vous pouvez utiliser la fonction ci-dessous. 

Request.RawUrl- Renvoie l'URL complète de la page en cours 

RouteData.Values- Renvoie une collection de valeurs d'URL

Request.Params- Retourne des collections de valeurs de nom 

4
yogesh lodha

Vous pouvez obtenir cette liste de paramètres dans l'objet ControllerContext.RoutValues ​​en tant que paire clé-valeur. 

Vous pouvez le stocker dans une variable et vous utilisez cette variable dans votre logique. 

1
Sameer Joshi

Pour obtenir les valeurs de vos paramètres, vous pouvez utiliser RouteData.

Plus de contexte serait bien. Pourquoi avez-vous besoin de les "extraire" en premier lieu? Vous devriez avoir une action du genre: public ActionResult Edit(int id, bool allowed) {}

0
Jakub Konecki

J'ai écrit cette méthode:

    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;
    }

Et j'appelle ça comme ça:

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

}
0