繁体   English   中英

如何让ServiceStack在MVC4项目中工作?

[英]How do I get ServiceStack to work in an MVC4 project?

我创建了一个新的MVC 4项目,并使用所有必需的ServiceStack包从NuGet更新它。

我把它添加到我的Web.config

<location path="ss">
  <system.web>
    <!-- httpHandlers added for ServiceStack, this will work for IIS6 and Below -->
    <httpHandlers>
      <add path="*" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*"/>
    </httpHandlers>
  </system.web>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <validation validateIntegratedModeConfiguration="false"/>
    <handlers>
      <add name="ServiceStack.Factory" path="*" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true"/>
    </handlers>
  </system.webServer>
</location>

我的AppHost

namespace MySql_Test.App_Start
{
    public class ApplicationHost : AppHostHttpListenerBase
    {
        public ApplicationHost()
            : base("PersonService", typeof(PersonService).Assembly)
        {
        }

        public override void Configure(Funq.Container container)
        {
            SetConfig(new HostConfig { HandlerFactoryPath = "ss" });

            container.Register<IDbConnectionFactory>(
                new OrmLiteConnectionFactory(ConfigurationManager.ConnectionStrings["DuDealsConnStr"].ConnectionString,
                    ServiceStack.OrmLite.MySql.MySqlDialectProvider.Instance));
        }
    }

    public class PersonService : Service
    {
    }
}

我的Global.cs

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        (new ApplicationHost()).Init();

        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
    }
}

当我构建并运行项目并尝试导航到localhost/ss/metadata它只是给我一个404页面。

默认情况下,默认的MVC4项目使用WebApi。 您需要阻止WebApi注册以接收您希望ServiceStack处理的请求。

请参阅ServiceStack文档, 创建您的第一个Web服务说明:

从默认的MVC4 VS.NET模板禁用WebApi
如果您正在使用MVC4,那么您需要在global.asax.cs中注释行以禁用WebApi

//WebApiConfig.Register(GlobalConfiguration.Configuration);

因此,将Application_Start设置为:

protected void Application_Start()
{
    (new ApplicationHost()).Init();
}

如果您希望ServiceStack与WebApi一起工作,那么您需要告诉WebApi不要处理以ss/ path开头的请求:

protected void Application_Start()
{
    (new ApplicationHost()).Init();

    AreaRegistration.RegisterAllAreas();

    // Ignore ServiceStack routes
    RouteTable.Routes.IgnoreRoute("ss/{*pathInfo}");

    WebApiConfig.Register(GlobalConfiguration.Configuration);
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

希望有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM