La risposta più immediata è l'uso:
routes.MapPageRoute(
"groupname",
"{group}",
"~/public/viewgroup"
);
E allora invece di (o oltre) utilizzando querystring
per estrarre il valore in ~/public/viewgroup
codice, si sarebbe invece estrarre il GROUPNAME da RouteData
come segue.
ControllerContext.RouteData.Values["groupname"];
L'altra opzione è utilizzare il modulo di riscrittura di IIS.
<rewrite>
<rules>
<rule name="groupname">
<match url="^([^/]*)$" />
<action type="Rewrite" url="public/viewgroup?group={R:1}" />
</rule>
</rules>
</rewrite>
Se davvero necessario passare il valore come nuovo valore querystring
, e si vuole utilizzare Routing, allora le cose si fanno difficili. In realtà devi definire un gestore personalizzato e riscrivere il percorso per aggiungere i valori di routing a 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);
}
}
Questo può essere registrato come segue:
routes.Add("groupname", new Route("{groupname}/products.aspx",
new RouteWithQueryHandler("~/products.aspx", true)));
E 'un bel po' di lavoro per evitare solo tirando fuori il valore ai dati di routing.
ho provato, ha lavorato sul server locale, ma in produzione non. –
Ha funzionato sulla produzione; dopo l'aggiunta di questi per web.config< moduli runAllManagedModulesForAllRequests = "true"> –
Aggiungere l'ultima configurazione più la configurazione sul sistema.web compilation> httpModules> –