La respuesta rápida es el uso:
routes.MapPageRoute(
"groupname",
"{group}",
"~/public/viewgroup"
);
Y entonces, en lugar de (o además de) usando querystring
para extraer el valor de ~/public/viewgroup
código, que sería en lugar de extraer el nombre de grupo de RouteData
como sigue.
ControllerContext.RouteData.Values["groupname"];
La otra opción es utilizar el módulo de reescritura de IIS.
<rewrite>
<rules>
<rule name="groupname">
<match url="^([^/]*)$" />
<action type="Rewrite" url="public/viewgroup?group={R:1}" />
</rule>
</rules>
</rewrite>
Si realmente debe pasar el valor como un nuevo valor querystring
, y desea utilizar enrutamiento, entonces las cosas se ponen difíciles. De hecho, debe definir un controlador personalizado y volver a escribir la ruta para agregar los valores de enrutamiento al querystring
.
public class RouteWithQueryHandler : PageRouteHandler
{
public RouteWithQueryHandler(string virtualPath, bool checkPhysicalUrlAccess)
: base(virtualPath, checkPhysicalUrlAccess)
{
}
public RouteWithQueryHandler(string virtualPath)
:base(virtualPath)
{
}
public override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
var request = requestContext.HttpContext.Request;
var query = HttpUtility.ParseQueryString(request.Url.Query);
foreach (var keyPair in requestContext.RouteData.Values)
{
query[HttpUtility.UrlEncode(keyPair.Key)] = HttpUtility.UrlEncode(
Convert.ToString(keyPair.Value));
}
var qs = string.Join("&", query);
requestContext.HttpContext.RewritePath(
requestContext.HttpContext.Request.Path, null, qs);
return base.GetHttpHandler(requestContext);
}
}
Esto puede ser registrado como sigue:
routes.Add("groupname", new Route("{groupname}/products.aspx",
new RouteWithQueryHandler("~/products.aspx", true)));
Es un buen montón de trabajo para evitar simplemente tirando del valor a partir de los datos de enrutamiento.
que lo han probado, trabajaron en el servidor local, pero no en la producción. –
Funcionó en producción; después de agregarlos a web.config –
Agregue la última configuración más la configuración del sistema.Web compilation> httpModules> –