Szybka odpowiedź jest zastosowanie:
routes.MapPageRoute(
"groupname",
"{group}",
"~/public/viewgroup"
);
A potem zamiast (lub jak) za pomocą querystring
wyodrębnić wartość w kodzie ~/public/viewgroup
, byś zamiast wydobyć groupname z RouteData
następująco.
ControllerContext.RouteData.Values["groupname"];
Inną opcją jest użycie modułu do przepisywania IIS.
<rewrite>
<rules>
<rule name="groupname">
<match url="^([^/]*)$" />
<action type="Rewrite" url="public/viewgroup?group={R:1}" />
</rule>
</rules>
</rewrite>
Jeśli naprawdę musi przekazać wartość jako nową wartość querystring
, i chcą korzystać Routing, a następnie robi się trudne. Musisz zdefiniować niestandardową procedurę obsługi i przepisać ścieżkę w celu dołączenia wartości routingu do 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);
}
}
To może być zarejestrowany w następujący sposób:
routes.Add("groupname", new Route("{groupname}/products.aspx",
new RouteWithQueryHandler("~/products.aspx", true)));
To dość dużo pracy, aby uniknąć po prostu wyciągając wartości z danych routingu.
próbowałem go, pracował na serwerze lokalnym, ale nie w produkcji. –
Pracowało nad produkcją; po dodaniu ich do pliku web.config –
Dodaj ostatnią konfigurację oraz konfigurację w systemie.web compilation> httpModules> –