ServiceStack不适用于RouteAttribute路径中的一个单词,但适用于两个

时间:2018-07-16 13:28:15

标签: .net

我们的代码中存在下一个问题: 我们有使用ASP.NET Web窗体框架的Web应用程序。在Areas中,我们有API区域。这使用ASP.NET MVC框架,我们希望使用ServiceStack与Api一起使用。但是我们的ServiceStack不能在RouteAttribute的路径中使用一个单词,而可以使用两个单词。

例如:

1)此变体不起作用

localhost / api / hello

[Route("/hello" )]
public class HelloWorld : IReturn<HelloResponse>
{
}

2)此变体有效

localhost / api / hello / world

[Route("/hello/{Name}") ]
public class HelloWorld : IReturn<HelloResponse>
{
}

3)在Web.config中,我们有位置路径,该路径通过localhost / api url设置将可以使用ServiceStack.Factory。

 <location path="webship/api">
<system.web>
  <httpHandlers>
    <add path="*" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" />
  </httpHandlers>
</system.web>

<!-- Required for IIS 7.0 -->
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true" />
  <validation validateIntegratedModeConfiguration="false" />
  <handlers>
    <add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*"
         preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
  </handlers>
</system.webServer>

当我们的应用程序进入第一选项(localhost / api / hello)时,我们会遇到 404错误

伙计们,请帮助解决此问题

1 个答案:

答案 0 :(得分:0)

请参阅Running ServiceStack side-by-side with MVC的文档,即,如果您希望将ServiceStack托管在/api上,则Web.config应该如下所示:

<location path="api">
<system.web>
  <httpHandlers>
    <add path="*" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*"/>
  </httpHandlers>
</system.web>

<!-- Required for IIS 7.0 -->
<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
  <validation validateIntegratedModeConfiguration="false" />
  <handlers>
    <add path="*" name="ServiceStack.Factory" 
         type="ServiceStack.HttpHandlerFactory, ServiceStack" 
         verb="*" preCondition="integratedMode" 
         resourceType="Unspecified" allowPathInfo="true" />
  </handlers>
</system.webServer>
</location>

您还需要在AppHost Configure()中设置HandlerFactoryPath

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