3

介绍

我的 ServiceStack 服务处理通常包含句点的路由参数,即: /people/search/b.j./upton. 最初,asp.net/ServiceStack 在遇到此路由时会抛出“404 - Not Found”异常。我尝试在没有运气的情况下对期间进行编码,但在看到一些相关%2E问题后通过我的.relaxedUrlToFileSystemMappingweb.config

问题

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

设置

服务栈-v3.9.56

IIS 7.5 / IIS Express(两者都有)

网络配置:

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

           <httpRuntime relaxedUrlToFileSystemMapping="true"/>

    ...

    </location>

问题

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

谢谢!

4

2 回答 2

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>
于 2013-08-05T01:37:09.010 回答
1

您是否更改了 AppHost 文件中的根路径

public override void Configure(Container container)
{
    SetConfig(new EndpointHostConfig { ServiceStackHandlerFactoryPath = "api" });
}
于 2013-08-04T03:27:05.410 回答