1

我已经安装ServiceStack.Host.MVC到具有很多控制器的现有 MVC3 项目中。

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

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

但我真的很想改变它来执行默认的控制器和操作作为 global.ascx 中的设置。我已经编辑了 DefaultRedirectPath 以指向/Home,它似乎工作正常,并且没有将 Home 添加到我的 url 或任何东西,但我不是 100% 了解在我的应用程序中拥有 AppHost 之间的关系。

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

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

4

2 回答 2

2

您可能不需要 DefaultRedirectPath,因为它只是对预定义 URL 的重定向。在使用旧的 url 时,您需要点击 MVC 控制器,并为 ServiceStack 提供一个新的 URL 区域。为此,首先设置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>
于 2013-02-15T17:42:38.393 回答
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>();
}
于 2013-02-19T15:31:02.800 回答