MVC4上的服务栈

时间:2012-09-11 02:20:08

标签: asp.net-mvc asp.net-mvc-4 servicestack

我只是想让Service Stack在mvc4项目下运行。 ServiceStack.Host.Mvc nuget包是否适用于mvc 4.0?我安装了它并将routes.IgnoreRoute("api/{*pathInfo}");添加到路由配置中,但是当我去

时它找不到路由

/api/metadata

我收到错误:

  

找不到与请求URI匹配的HTTP资源   'http://localhost:51681/api/metadata'。

3 个答案:

答案 0 :(得分:15)

找到解决方案。每当我们创建新的asp.net mvc4项目时,它都会附带Asp.Net Web Api。而且还有路径api /。我不需要你们两个,所以只需使用nuget包管理器删除那些模块,它就会像任何东西一样工作。

如果你仍然卡在任何地方让我知道。因为它现在正在使用asp.net mvc4。

答案 1 :(得分:10)

在安装README.txtServiceStack.Host.Mvc NuGet package页面中显示了使用MVC安装ServiceStack所需的说明,我们添加了一个extra line for support with MVC4,因为它与一个冲突的WepApi捆绑在一起。< / p>

For MVC4 applications you also need to unregister WebApi, by commenting out this line:

    //WebApiConfig.Register(GlobalConfiguration.Configuration);

我们也不喜欢向disable WebApi from the default install of MVC4提供手动安装说明,但不幸的是,这是目前我们可以做的最好的事情。

ServiceStack docs是一个社区维基

如果您认为ServiceStack's wiki docs中缺少某些内容,请随意添加,因为它们是由ServiceStack社区维护的社区维基文档。

要求aspnetwebstack团队更简单地禁用WebApi

我们已经向aspnetwebstack团队请求他们是否可以提供easier and automated way to be able to disable WebApi via Nuget,请随时通过评论功能请求来表明您对此功能的支持。

完整的README.txt说明

为了使README更易于搜索,我将在此处重复:


ASP.NET MVC中的托管非常类似于在任何ASP.NET框架中托管,即ServiceStack AppHost仍需要在Global.asax.cs(或WebActivator)启动时初始化,例如:

public class Global : System.Web.HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        new AppHost().Init();
    }
}

必须注册ServiceStacks'/ api'路径,方法是将以下行添加到Global.asax中的MvcApplication.RegisterRoutes(RouteCollection):

routes.IgnoreRoute("api/{*pathInfo}"); 
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); //Prevent exceptions for favicon

将它们放在当前输入方法之前。

对于MVC4应用程序,您还需要通过注释掉这一行取消注册WebApi:

    //WebApiConfig.Register(GlobalConfiguration.Configuration);

要启用Mini Profiler,请将以下行添加到Global.asax.cs中的MvcApplication中:

protected void Application_BeginRequest(object src, EventArgs e)
{
    if (Request.IsLocal)
        ServiceStack.MiniProfiler.Profiler.Start();
}

protected void Application_EndRequest(object src, EventArgs e)
{
    ServiceStack.MiniProfiler.Profiler.Stop();
}

有关MiniProfiler的更多信息,请参阅https://github.com/ServiceStack/ServiceStack/wiki/Release-Notes

的v3.09

Urls for metadata页面和包含的服务:

答案 2 :(得分:1)

我是新用的服务栈,我也使用MVC 4应用程序,答案@mythz是对的。 但是对于

routes.IgnoreRoute("api/{*pathInfo}");
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" }); //Prevent exceptions for favicon

放在AppStart / RouteConfig.cs

我的应用程序运行良好:D