3

I'm using ServiceStack in an MVC4, VS2012 project running on windows7. I'm attempting to call a default "/search" route when the application loads. To do this I have the following code in my AppHost Configure method

Plugins.Add(new RazorFormat());

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

If I call this route directly (via /api/search) it works correctly. However when I run my project I simply get a HTTP Error 403.14 - Forbidden error. It's appears to be attempting to locate a static source document from the website root (I've removed all of these) rather than the dynamic route specified in DefaultRedirectPath

I've also added a HttpHandler via the CatchAllHandlers method to see if the route is being attempted but it appears the DefaultRedirect is simply not happening.

Any suggestions would be greatly appreciated. From everything I've read this should just work.

4

1 回答 1

2

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

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

它应该工作,如果你使用DefaultRedirectPath = "/api/search".

但是,当 ServiceStack 不在网站的根目录时,它将MetadataRedirectPath首先使用,并且仅当它为 null 或为空时,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 主控制器中进行。

于 2013-07-17T06:13:49.693 回答