2011-09-04 12 views
5

Rozwijam funkcję grupy na aplikacji asp.net. Chcę dać użytkownikom bezpośredni dostęp do grup, więc chcę url byćRouting URL na ASP.net, trzeba uzyskać parametr z adresu url

www.<domain>.com/<groupname> 

I wdrożone URL Routing w tym przypadku, ale problem, który chcę przekazać nazwę grupy się do strony asp jako parametr , jak mogę to zrobić?

rzeczywistą ścieżką jest "~/Public/ViewGroup?group=<groupname>, jak uzyskać tę nazwę grupy i dodać ją do ścieżki wirtualnej?

Dzięki

+0

próbowałem go, pracował na serwerze lokalnym, ale nie w produkcji. –

+0

Pracowało nad produkcją; po dodaniu ich do pliku web.config

+0

Dodaj ostatnią konfigurację oraz konfigurację w systemie.web

Odpowiedz

5

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.

+0

używam. 3.5, więc używam metody Map.add r outes.Add (nowa Route ("{groupname}", nowy GroupRouteHandler ("~/Public/ViewGroup? group = {groupname}") )); Dało mi to ten błąd: ~/Publiczna/ViewGroup? Group = {groupname} 'nie jest prawidłową ścieżką wirtualną –

+0

Przepraszam, moje złe? jest niedozwolone, możesz użyć reguły przepisywania. – TheCodeKing

+0

Możesz to również zrobić z routingiem, próbując znaleźć właściwą sytnax. – TheCodeKing

0

ASP.NET Parametry ścieżki ścieżki MVC (parametry) mogą być dostępne w kontrolerze C#, podobnie jak w przypadku. Argument ścieżka do pobrania to "id", który zwraca wartość "123".

MVC Routing

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.MapRoute(
     "Default", 
     "{controller}/{action}/{id}", 
     new { id = RouteParameter.Optional }); 
} 

//Test URL: http://localhost/MyProject/Test/GetMyId/123 

MyController.cs

public class TestController : Controller 
{ 
    public string GetMyId() 
    { 
     //ANSWER -> ControllerContext.RouteData.Values["id"] 
     return ControllerContext.RouteData.Values["id"].ToString(); 
    } 
} 
Powiązane problemy