2013-12-13 54 views
1

我已经经历了服务堆文档中的所有步骤,并遵循Stack Overflow中类似帖子的建议,但每当我尝试访问我的“/ api /”路由时,都会收到以下错误消息:如何与asp.net MVC 4并排安装服务堆栈4?

的代码
Handler for Request not found: 


Request.HttpMethod: GET 
Request.PathInfo: /api/metadata 
Request.QueryString: 
Request.RawUrl: /api/api/metadata 

有关章节:

APPHOST:

public class HolidayEventPlannerAppHost : AppHostBase 
    { 
     public HolidayEventPlannerAppHost() : base("Holiday Event Planner App Host", typeof(HelloService).Assembly) { } 

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

Routeconfig.cs:

public static void RegisterRoutes(RouteCollection routes) 
     { 
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
      routes.IgnoreRoute("api/{*pathInfo}"); 

      routes.MapRoute(
       name: "Default", 
       url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
      ); 
     } 

另外,当我在浏览器的地址栏中输入“localhost:port/api”时,浏览器被重定向到“localhost:port/api/api/metadata”,这是我得到错误信息的地方。它不会让我访问“localhost:port/api/metadata”。

回答

2

最后有人帮助完全消除元数据。 你需要把:

SetConfig(new HostConfig 
    { 
     HandlerFactoryPath = "api", 
     MetadataRedirectPath = "/" 
    }); 
1

有一个托管ServiceStack with MVC4的现有模板,您还需要确保您的Web.config已正确配置ServiceStack,您可以将其与Mvc4 Web.Config进行比较。

有关与MVC集成的更多信息是available on the wiki

+0

重定向到元数据页面的代码似乎存在问题。如果handlerfactorypath是“api”,则默认的MetdataRedirectPath被确定为“api/metadata”。 ServiceStack.HttpHandlerFactory试图通过简单地连接它们来尝试从这两者中创建绝对URL。 –

1

自从使用ServiceStack的v4以来,我对这个重定向路径有类似的问题。

作为一个解决方法,我发现有以下HostConfig重写MetadataRedirectPath工作:

 SetConfig(new HostConfig 
     { 
      HandlerFactoryPath = "api", 
      MetadataRedirectPath = "/metadata" 
     }); 

我觉得没有这个配置,错误被在任何默认MetadataRedirectPath确定或如何重定向曝光url与处理程序工厂路径结合使用。

2

我使用ServiceStack 70年3月9日,我为了使用ServiceStack与MVC的WebAPI以来我不得不这样做:

SetConfig(new EndpointHostConfig 
    { 
     ServiceStackHandlerFactoryPath = "sapi", 
     MetadataRedirectPath = "sapi/metadata" 
    }); 

这样我可以使用用于WebAPI的api和用于ServiceStack的sapi。别忘了你还需要修改Web.Config,full instruction here