c# - MVC3 Route/redirect problem -
my application multilingual , wrote following route in order handle languages:
routes.maproute( "default", // route name "{language}/{controller}/{action}/{id}", // url parameters new { controller = "home", action = "index", language = "pt", id = urlparameter.optional }, // parameter defaults new { language = @"(pt)|(es)|(en)" } );
this works domain.com
, domain.com/pt/home/index
. however, if type domain.com/home/index
fails (404).
the desired behavior being redirected domain.com/pt/home/index
(pt default language).
whats best way achieve this? i've been reading lot routes , actionfilters nothing seems quite right.
i suggest using custom route handler following
public class languageroutehandler : iroutehandler { public ihttphandler gethttphandler(requestcontext requestcontext) { iroutehandler handler = new mvcroutehandler(); var vals = requestcontext.routedata.values; if(vals["language"] == null) { vals["language"] = "pt"; } return handler.gethttphandler(requestcontext); } }
and have route without language route value , set route handler (global.asax)
routes.maproute( "default2", // route name "{controller}/{action}/{id}", // url parameters new { controller = "home", action = "index", id = urlparameter.optional } // parameter defaults ).routehandler = new languageroutehandler();
this not redirect home/index pt/home/index yet provide language = "pt" index action method (and others). if want redirect can implement actionfilter redirecting create problems post requests. example when post form /home/index , suppose redirected action filter, redirected request lose posted form data
Comments
Post a Comment