路径不存在时的ServiceStack Razor行为';不存在
我有以下设置:路径不存在时的ServiceStack Razor行为';不存在,razor,servicestack,Razor,servicestack,我有以下设置: CustomHttpHandlers = { {HttpStatusCode.NotFound, new RazorHandler("/notfound")}, {HttpStatusCode.Unauthorized, new RazorHandler("/unauthorized")}, } 当我访问/stars文件夹中不存在的内容时: /stars/asdf/xyz 它首先检查/stars/asdf/default.csht
CustomHttpHandlers = {
{HttpStatusCode.NotFound, new RazorHandler("/notfound")},
{HttpStatusCode.Unauthorized, new RazorHandler("/unauthorized")},
}
当我访问/stars
文件夹中不存在的内容时:
/stars/asdf/xyz
它首先检查/stars/asdf/default.cshtml
。然后转到stars/default.cshtml
并加载具有default
页面的任何级别。因此,只有当/stars
根文件夹根本不存在时,才会加载/notfound
当/asdf/xyz
不存在时,是否可以要求它加载/notfound
这是根目录下的行为:
http://localhost:2000/asdf
将带您到/notfound
。但是,它在文件夹下不会这样做
谢谢你
编辑------------------------------------------------------
我注意到,如果我转到错误的url/stars/asdf
,其中/stars
没有默认值,但是根/default.cshtml
实际上存在,在这种情况下,两个/notfound
->/default
都会一个接一个地加载
我的设置错了吗?SS Glicted?ServiceStack的路由优先级如下所示。ServiceStack调用ServiceStackHttpHandlerFactory.GetHandler以获取当前路由的处理程序
ServiceStackHttpHandlerFactory.GetHandler
返回:
GetCatchAllHandlerIfAny(…),
返回的处理程序(如果有)ServiceStackHttpHandlerFactory.GetHandlerForPathInfo
返回的处理程序(如果有)ServiceStackHttpHandlerFactory.GetHandlerForPathInfo
返回:
- 由
返回的处理程序(如果有)GetCatchAllHandlerIfAny(…),
- 如果它是受支持的文件类型,则为StaticFileHandler
- 如果它不是受支持的文件类型,则禁用HttpHandler
GetCatchAllHandlerIfAny(…),
返回的处理程序(如果有)foreach (var defaultDoc in EndpointHost.Config.DefaultDocuments)
{
var defaultFileName = Path.Combine(fi.FullName, defaultDoc);
if (!File.Exists(defaultFileName)) continue;
r.Redirect(request.GetPathUrl() + '/' + defaultDoc);
return;
}
如您所见,如果在请求的目录中找不到默认文件,它将重定向目录链,直到找到要提供服务的默认文件。如果需要更改此行为,可以通过在代码中添加CatchAllHander来覆盖它。有关编写CatchAllHandler的更多详细信息,请参见我对一个相关问题的回答:ServiceStack的路由优先级如下。ServiceStack调用ServiceStackHttpHandlerFactory.GetHandler以获取当前路由的处理程序
ServiceStackHttpHandlerFactory.GetHandler
返回:
GetCatchAllHandlerIfAny(…),
返回的处理程序(如果有)ServiceStackHttpHandlerFactory.GetHandlerForPathInfo
返回的处理程序(如果有)ServiceStackHttpHandlerFactory.GetHandlerForPathInfo
返回:
- 由
返回的处理程序(如果有)GetCatchAllHandlerIfAny(…),
- 如果它是受支持的文件类型,则为StaticFileHandler
- 如果它不是受支持的文件类型,则禁用HttpHandler
GetCatchAllHandlerIfAny(…),
返回的处理程序(如果有)foreach (var defaultDoc in EndpointHost.Config.DefaultDocuments)
{
var defaultFileName = Path.Combine(fi.FullName, defaultDoc);
if (!File.Exists(defaultFileName)) continue;
r.Redirect(request.GetPathUrl() + '/' + defaultDoc);
return;
}
如您所见,如果在请求的目录中找不到默认文件,它将重定向目录链,直到找到要提供服务的默认文件。如果需要更改此行为,可以通过在代码中添加CatchAllHander来覆盖它。有关编写CatchAllHandler的更多详细信息,请参见我对相关问题的回答,如下所示: