2011-04-13 7 views
7

¿Cuáles son las mejores prácticas para implementar el patrón de rastreo hashbang/Ajax de Google con ASP.NET MVC?Implementando el rastreo hashbang/Ajax de Google con ASP.NET MVC?

http://code.google.com/web/ajaxcrawling/docs/getting-started.html:

el rastreador va a modificar cada URL AJAX como

www.example.com/ajax.html#!key=value 

para convertirse temporalmente

www.example.com/ajax.html?_escaped_fragment_=key=value 

marco de enrutamiento de ASP.NET no permite especificar parámetros de cadena de consulta, pero, por supuesto, siempre puede crear un método de acción que tome _escaped_fragment_ como parámetro (o incluso solo busque el parámetro _escaped_fragment_ en el encabezado de la solicitud).

Sin embargo, es un poco engorroso. ¿Hay una mejor manera?

ACTUALIZACIÓN:

que siguió adelante e implementado el siguiente patrón (en mi caso los fragmentos parecen una ruta URL regular). Una vez más, este no es el enfoque más limpio, por lo que cualquier sugerencia es bienvenida.

public virtual ActionResult Index(int id, string _escaped_fragment_) 
{ 
    //Handle Google Ajax Crawler 
    if (_escaped_fragment_ != null) 
    { 
     string[] fragments = _escaped_fragment_.Split(new char[]{'/'}, StringSplitOptions.RemoveEmptyEntries); 
     if (fragments.Length > 0) 
     { 
      //parse fragments 
      //return static content 
     } 
    } 
    //normal action operation 
    return View(); 
} 
+5

es posible que desee poner esto en el controladores OnActionExecuting método, en lugar de en la acción. De esta forma, puedes redirigir a la acción que consideres mejor. –

+0

Sí, probablemente sea cierto ... –

Respuesta

1

Escribes utilizar un aglomerante modelo personalizado que tendrá el parámetro de cadena _escaped_fragment_ consulta y devolver algún modelo inflexible:

public ActionResult Index(MyModel model) 
{ 
    // Directly use model.Id, model.Key1, model.Key2, ... 
    return View(); 
}