我有一个后备 DTO,如下所示:
[FallbackRoute("/{Path*}")]
public class Fallback
{
public string Path { get; set; }
}
现在,在我的服务中,我想重定向到一个符合 HTML5 的 URL,这就是我尝试过的:
public object Get(Fallback fallback)
{
return this.Redirect("/#!/" + fallback.Path);
}
除了查询参数没有与路径一起传递这一事实外,它工作得很好而且很花哨。使用Request.QueryString
不起作用,因为无论我做什么它都是空的。这是我当前(非工作)解决方案的样子:
public object Get(Fallback fallback)
{
StringBuilder sb = new StringBuilder("?");
foreach (KeyValuePair<string, string> item in Request.QueryString)
{
sb.Append(item.Key).Append("=").Append(item.Value).Append("&");
}
var s = "/#!/" + fallback.Path + sb.ToString();
return this.Redirect(s);
}
TL;DR:我想将查询字符串与后备路径一起传递。
编辑:原来我有两个问题;在我将上述循环更改为之后,现在将mysite.com/url/that/does/not/exist?random=param
正确地将请求重定向到:mysite.com/#!/url/that/does/not/exist?random=param&
foreach (string key in Request.QueryString)
{
sb.Append(key).Append("=").Append(Request.QueryString[key]).Append("&");
}
但是后备仍然没有被根调用,这意味着mysite.com/?random=param
不会触发任何东西。
本质上,我想做的是让 ServiceStack 在根目录下查找查询字符串,例如,mysite.com/?key=value
应用一些逻辑,然后触发重定向。这样做的目的是为了让爬虫机器人能够使用_escaped_fragment_
参数查询站点,然后呈现由服务器准备的 HTML 快照。这是为了让机器人能够索引单页应用程序(更多内容)。
我在想也许 FallbackRoute 功能不会涵盖这一点,我需要求助于覆盖CatchAllHandler
.