ServiceStack 4: игнорировать favicon.ico в резервном маршруте

У меня более или менее статичный веб-сайт, созданный на ServiceStack.Razor, с маршрутами, определенными в виде следующих шаблонов: я пытаюсь игнорировать favicon.ico, но перенаправлять пути, такие как "/" или "/ en-us", в сценарий HomeScenario., Другие примеры маршрутов: /{Lang}/cook или /{Lang}/cheer и т. Д.

К сожалению, мой нынешний подход не игнорирует favicon.ico. Я хотел бы реализовать это без надежды на написание большого количества дополнительного кода.

[FallbackRoute("/{Lang*}")]
public class HomeScenario : LocalizedRequest
{

}

public class LocalizedRequest
{
    public LocalizedRequest()
    {
        Lang = "en-us";
    }
    public string Lang { get; set; }
}

Вот запрос по умолчанию

[DefaultView("home")]
public object Get(HomeScenario request)
{
    var cacheKey = GetCacheKey ("home", request.Lang);
    return base.Request.ToOptimizedResultUsingCache (base.Cache, cacheKey, () => {
        var response = LoadJson<HomeScenarioResponse> (request.Lang, "home");
        return response;
    });
}

1 ответ

Решение

Вы можете просто игнорировать запросы в коде:

[DefaultView("home")]
public object Get(HomeScenario request)
{
    if (base.Request.PathInfo == "/favicon.ico")
        return HttpError.NotFound(request.PathInfo);

    var cacheKey = GetCacheKey ("home", request.Lang);
    return base.Request.ToOptimizedResultUsingCache (base.Cache, cacheKey, () => {
        var response = LoadJson<HomeScenarioResponse> (request.Lang, "home");
        return response;
    });
}

В противном случае вы можете зарегистрировать обработчик CatchAll далее по конвейеру запросов, который обрабатывает нежелательные запросы, например:

this.CatchAllHandlers.Add((httpmethod, pathInfo, filepath) => {

    if (pathInfo == "/favicon.ico") 
        return new NotFoundHttpHandler();

    return null; //continue processing request
});
Другие вопросы по тегам