使用自定义路径时,ServiceStack web.config设置被忽略

时间:2013-08-03 17:12:42

标签: asp.net iis web-config asp.net-mvc-routing servicestack

简介

我的ServiceStack服务处理通常包含句点的路由参数,即: /people/search/b.j./upton。最初,asp.net/ServiceStack在遇到此路由时会抛出“404 - Not Found”异常。我尝试编码%2E这段时间没有运气但最终通过在relaxedUrlToFileSystemMapping中设置web.config属性(info)看到一些相关问题后解决了问题。

问题

直到今天,我必须通过将<location path="api">(如here所述)添加到我的web.config,将我的服务位置从默认路径更改为自定义路径。由于在web.config中添加了位置节点,因此不再应用relaxedUrlToFileSystemMapping设置,并且我的句点/api/people/search/b.j./upton的路由再次中断,导致ServiceStack出现“404 - Not Found”异常。

设置

ServiceStack - v3.9.56

IIS 7.5 / IIS Express(同时发生)

的web.config:

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

           <httpRuntime relaxedUrlToFileSystemMapping="true"/>

    ...

    </location>

问题

任何人都知道为什么在将relaxedUrlToFileSystemMapping属性从默认路径移到web.config中的自定义<location path="api">内时会忽略该属性?

谢谢!

2 个答案:

答案 0 :(得分:3)

在对我的web.config进行一些修补之后,我能够通过将relaxedUrlToFileSystemMapping条目移动到<location>节点之外的自己的节点来解决这个问题。我不确定这是否是推荐的方法(多个<system.web>条目?)或者可能会导致其他一些冲突但是在对服务进行完整的系统测试之后,一切都工作正常,所以我要去现在用这个。

我的更新和完整的web.config供参考:

<configuration>

  <system.web>
    <httpRuntime relaxedUrlToFileSystemMapping="true"/>
  </system.web>

  <location path="api">

    <system.web>
      <httpHandlers>
        <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" />
      </httpHandlers>
    </system.web>

    <connectionStrings>
      <add name="AppDb" connectionString="data source=AppHost\SQLEXPRESS;Initial Catalog=db;User Id=AppUser;password=AppPwd;" providerName="System.Data.SqlClient" />
    </connectionStrings>
    <system.webServer>
      <modules runAllManagedModulesForAllRequests="true" />
      <validation validateIntegratedModeConfiguration="false" />
      <handlers>
        <add path="*" name="ServiceStack.Factory" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
      </handlers>
    </system.webServer>
  </location>

</configuration>

答案 1 :(得分:1)

您是否更改了AppHost文件中的root path

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