0

我在 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;
    });
}
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 回答