c# - route - ASP.NET MVC-Extrae el parámetro de una URL
route controller c# (6)
Escribí este método:
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;
}
Y lo llamo así:
string fooBar = GetUrlParameter(Request, "FooBar");
if (!string.IsNullOrEmpty(fooBar))
{
}
Estoy tratando de extraer los parámetros de mi URL, algo como esto.
/ Administración / Cliente / Editar / 1
extracto: 1
/ Administración / Producto / Editar / 18? Allowed = true
extracto: 18? allowed = true
/ Administración / Producto / Crear? Allowed = true
extracto :? allowed = true
Alguien puede ayudar? ¡Gracias!
No estoy familiarizado con ASP.NET, pero supongo que podría usar una función dividida para dividirla en una matriz usando el delimitador / como, luego tomar el último elemento de la matriz (generalmente la longitud de la matriz -1) para obtener el extracto usted quiere.
Ok, esto no parece funcionar para todos los ejemplos.
¿Qué tal una expresión regular?
.*(/|[a-zA-Z]+/?)(.*)
luego obtengo esa última subexpresión (.*)
, creo que es $+
en .Net, no estoy seguro
Para obtener valores de sus parámetros, puede usar RouteData.
Más contexto sería bueno. ¿Por qué necesitas ''extraerlos'' en primer lugar? Debería tener una Acción como: public ActionResult Edit(int id, bool allowed) {}
Puede obtener esta lista de parámetros en el objeto ControllerContext.RoutValues como par clave-valor.
Puede almacenarlo en alguna variable y hacer uso de esa variable en su lógica.
Actualizar
RouteData.Values["id"] + Request.Url.Query
Coincidirá con todos sus ejemplos
No está del todo claro lo que estás tratando de lograr. MVC le pasa parámetros de URL a través del enlace del modelo.
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();
}
}
Agregar una asignación de ruta a su archivo global.asax.cs antes de que el valor predeterminado maneje la / administration / part. O tal vez quiera mirar áreas de MVC.
routes.MapRoute(
"Admin", // Route name
"Administration/{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
Si se trata de los datos de URL sin formato que está buscando, puede usar una de las diversas propiedades de URL y Solicitud disponibles en la acción de su controlador
string url = Request.RawUrl;
string query= Request.Url.Query;
string isAllowed= Request.QueryString["allowed"];
Parece que Request.Url.PathAndQuery
podría ser lo que quieres.
Si desea acceder a los datos publicados sin procesar, puede usar
string isAllowed = Request.Params["allowed"];
string id = RouteData.Values["id"];
public ActionResult Index(int id,string value)
Esta función obtiene valores de URL Después de eso, puede usar la función siguiente
Request.RawUrl
- Devuelve la URL completa de la página actual
RouteData.Values
- Return Collection of Values of URL
Request.Params
- Return Name Value Collections