У меня есть запасной вариант DTO, который выглядит следующим образом:
ServiceStack - Перенаправление в корне на основе запроса Params
[FallbackRoute("/{Path*}")]
public class Fallback
{
public string Path { get; set; }
}
Теперь в моей службы я хотел бы перенаправить к совместимому URL HTML5 , и это то, что я пробовал:
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: Я хочу передать строки запроса вместе с запасным путем.
EDIT: Оказалось, что у меня две проблемы; теперь собирается 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, подготовленный сервером. Это необходимо для того, чтобы боты могли индексировать одностраничные приложения (more on this).
Я думаю, что функция FallbackRoute не будет охватывать это, и мне нужно прибегнуть к переопределению CatchAllHandler
.