将ServiceStack默认路由转到MVC3 Controller

时间:2013-02-15 17:39:07

标签: c# asp.net-mvc servicestack

我已将ServiceStack.Host.MVC安装到具有大量控制器的现有MVC3项目中。

现在路由到default.htm。我找到了另一个说更改默认重定向路径的StackOverFlow问题,请执行以下操作。

SetConfig(new EndpointHostConfig {DefaultRedirectPath = "/Foo" });

但我真的想要改变它以在global.ascx中执行默认的Controller和Action设置。我已将DefaultRedirectPath编辑为指向 / Home ,它似乎工作正常,并且不会将Home添加到我的网址或任何内容,但我不是100在我的应用程序中使用AppHost之间的关系%。

如果更改这个不是正确的事情,那么开始将一些Service Stack AppHost与常规MVC应用程序集成的最佳方法是什么。我要将我的基本控制器移动到ServiceStackController,然后慢慢开始使用新的会话和用户管理。最终,我将要使用授权或共享sessionId与某些服务,但我稍后会谈到。

首先,我的目标是开始使用Funq的一些IOC功能。

2 个答案:

答案 0 :(得分:2)

您可能不需要DefaultRedirectPath,因为它只是重定向到预定义的URL。使用旧URL时,需要使用MVC控制器,并为ServiceStack创建新的URL区域。为此,start by setting ServiceStackHandlerFactoryPath。它应该允许您在子URL中托管ServiceStack,并且它不会干扰您现有的控制器,除非路径中存在冲突:

SetConfig(new EndpointHostConfig { ServiceStackHandlerFactoryPath = "api" });

web.config中的ServiceStack http处理程序需要匹配:

<location path="api">
<!-- Required for IIS 7.0 -->
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
    </handlers>
  </system.webServer>
</location>

答案 1 :(得分:1)

ServiceStack BootstrapAPI应用程序将CatchAllController设置为MVC应用程序的HomeController。这对我有用。

在AppHost :: Configure中,我输入以下代码:

public override void Configure(Funq.Container container)
{
  //  Other Configuration constructs here

  ServiceStackController.CatchAllController = reqCtx => container.TryResolve<HomeController>();
}