使用ASP.NET MVC实现Google的hashbang / Ajax爬网模式的最佳做法是什么?
http://code.google.com/web/ajaxcrawling/docs/getting-started.html:
抓取工具会修改每个AJAX网址 比如
www.example.com/ajax.html#!key=value
暂时变为
www.example.com/ajax.html?_escaped_fragment_=key=value
ASP.NET的路由框架不允许指定查询字符串参数,但当然您总是可以创建一个将_escaped_fragment_作为参数的操作方法(甚至只需在请求标头中查找_escaped_fragment_参数)。
然而,这有点麻烦。还有更好的方法吗?更新
我继续实施以下模式(在我的例子中,片段看起来像常规的url路径)。同样,这不是最干净的方法,所以欢迎任何建议。
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();
}
答案 0 :(得分:1)
您编写的是使用自定义模型绑定器,它将获取_escaped_fragment_
查询字符串参数并返回一些强类型模型:
public ActionResult Index(MyModel model)
{
// Directly use model.Id, model.Key1, model.Key2, ...
return View();
}