0

ServiceStack.Razor で多かれ少なかれ静的な Web サイトを構築しており、ルートは次のパターンとして定義されています: 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;
    });
}
4

1 に答える 1

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
});
于 2014-03-27T22:51:01.690 に答える