【问题标题】:Have ServiceStack default route go to MVC3 Controller让 ServiceStack 默认路由转到 MVC3 控制器
【发布时间】:2013-02-15 17:39:06
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: c# asp.net-mvc servicestack


    【解决方案1】:

    您可能不需要 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>
    

    【讨论】:

    • 默认情况下,NuGet 包为我完成了这项工作。服务堆栈服务的东西挂在 /api 之外。但是,在我的常规 MVC 应用程序加载之前,AppHost 仍在做一些事情......而我正试图更好地理解这些事情。
    • 它是做什么的?你到底是什么问题?
    • AppHost 正在加载并重定向到 default.htm,我通过设置 DefaultRedirectPath = "/Home" 对其进行了更改。我将重新编辑我的问题,但我只想验证在我的 global.aspx 代码之前运行的 AppHost 的顺序是否正确,并且以适当的方式设置我的默认 redirectPath 以开始集成到现有 MVC 站点代码中。我花了很多时间在 SocialBootstrapApi 上尝试理解这一切。即使我将 SS 处理程序从 /api 挂起,我仍然希望能够将 AppHost 的东西集成到我的常规应用程序中。
    • 好的,我想我知道我缺少什么了,我需要为每个 BootstrapAPI 应用程序设置 CatchAllController:eServiceStackController.CatchAllController = reqCtx => container.TryResolve();这似乎解决了默认控制器问题,并让我准备好让 Funq 容器与我现有的控制器一起工作。
    【解决方案2】:

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

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

    public override void Configure(Funq.Container container)
    {
      //  Other Configuration constructs here
    
      ServiceStackController.CatchAllController = reqCtx => container.TryResolve<HomeController>();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 2010-12-15
      相关资源
      最近更新 更多