ServiceStack DefaultRedirectPath未触发

时间:2013-07-17 04:47:04

标签: asp.net-mvc asp.net-mvc-4 servicestack

我在Windows7上运行的MVC4,VS2012项目中使用ServiceStack。我正在尝试在应用程序加载时调用默认的“/ search”路由。为此,我在AppHost配置方法

中有以下代码
Plugins.Add(new RazorFormat());

SetConfig(new EndpointHostConfig
        {
            ServiceStackHandlerFactoryPath = "api",
            DefaultRedirectPath = "/search"
        });

如果我直接调用此路由(通过/ api / search),它可以正常工作。但是,当我运行我的项目时,我只是得到一个HTTP错误403.14 - 禁止错误。它似乎是试图从网站根目录中找到一个静态源文档(我已经删除了所有这些)而不是DefaultRedirectPath中指定的动态路由

我还通过CatchAllHandlers方法添加了一个HttpHandler来查看是否正在尝试路由,但看起来DefaultRedirect根本就没有发生。

任何建议都将不胜感激。从我读过的所有内容中,这应该可行。

1 个答案:

答案 0 :(得分:2)

我假设你也在web.config中正确设置了/api路径。

DefaultRedirectPath只是在您请求API根目录时使用的简单重定向(即“/ api”)。它实际上返回302,其DefaultRedirectPathLocation标题(如果您的ASP.NET应用程序不在服务器的根目录,则与应用程序根URL结合使用)。换句话说,它不是一个“路线”,只是一个相对的URL。在您的情况下,它会重定向到应用程序根目录中的/search,而不是/api/search

如果您使用DefaultRedirectPath = "/api/search",它应该有用。

但是,当ServiceStack不在网站的根目录时,它将首先使用MetadataRedirectPath,并且仅当它为空或空时DefaultRedirectPath。因此,如果这是你想要的,你需要将MetadataRedirectPath设置为null。

至于你对CatchAllHandlers的测试,据我所知,CatchAllHandlers实际上导致你的DefaultRedirect不被使用--CatchAllHandler将被用作处理程序,并且执行DefaultRedirectPath重定向的DefaultRedirectHandler将不会发挥作用。

这样可以将从“/ api”重定向到“/ api / search”

MVC控制你的根URL - web.config和AppHost.Config的“api”添加正是这样 - 保持ServiceStack仅控制“/ api”,同时让MVC处理剩下的事情。因此,使用该设置,如果您希望从“/”重定向到“/ api / search”,则需要在MVC主控制器中执行此操作。