Sto lavorando con alcuni software di terze parti che creano i parametri di querystring con i trattini nei loro nomi. Stavo dando un'occhiata a this SO question e sembra che la loro soluzione sia molto vicina a quello di cui ho bisogno, ma sono troppo ignorante per quanto riguarda la roba MVC sottostante per capire come adattarlo per fare ciò di cui ho bisogno. Idealmente, mi piacerebbe semplicemente sostituire i trattini con caratteri di sottolineatura e questa sarebbe una soluzione abbastanza buona. Se ce n'è uno migliore, allora sono interessato a sentirlo.Gestione variabili MVC2 con trattini nel nome
Un esempio di un URL che voglio gestire è questo:
http://localhost/app/Person/List?First-Name=Bob&My-Age=3
con questo controller:
public ActionResult List(string First_Name, int My_Age)
{
{...}
}
a ripetere, non posso cambiare la querystring generato così ho bisogno di sostenerlo con il mio controller in qualche modo. Ma come?
Per riferimento, sotto è il RouteHandler personalizzato che viene utilizzato per gestire underscore nei nomi di controller e nomi di azioni dalla domanda SO ho fatto riferimento in precedenza che potremmo essere in grado di modificare a compiere quello che voglio:
public class HyphenatedRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
{
requestContext.RouteData.Values["controller"] = requestContext.RouteData.Values["controller"].ToString().Replace("-", "_");
requestContext.RouteData.Values["action"] = requestContext.RouteData.Values["action"].ToString().Replace("-", "_");
return base.GetHttpHandler(requestContext);
}
}
In realtà anziché aggiungere agli ActionParameters che comporterebbero un'eccezione poiché l'elemento esiste già, è possibile impostare il valore: 'filterContext.ActionParameters [k. Sostituisci ('-', '_')] = filterContext.HttpContext.Request.QueryString [k]; ' –
Idea interessante, @Darin. Non sono sicuro in che modo mi piace di più. –
Non è una questione di piacere, il tuo codice genererà un'eccezione dato che c'è già il parametro 'First_Name' nella raccolta' ActionParameters' che deriva dal nome dell'argomento del metodo. –