[英]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.