servicestack,C#,servicestack" /> servicestack,C#,servicestack" />

C# ServiceStack FallbackRoute在升级ServiceStack版本时失败

C# ServiceStack FallbackRoute在升级ServiceStack版本时失败,c#,servicestack,C#,servicestack,我们将C#web服务从ServiceStack V4.0.31升级到V5.1.0。我们在linux环境中使用以下软件包和monodevelop运行时 <package id="ServiceStack" version="5.1.0" targetFramework="net45" /> <package id="ServiceStack.Client" version="5.1.0" targetFramework="net45" /> <packag

我们将C#web服务从ServiceStack V4.0.31升级到V5.1.0。我们在linux环境中使用以下软件包和monodevelop运行时

  <package id="ServiceStack" version="5.1.0" targetFramework="net45" />
  <package id="ServiceStack.Client" version="5.1.0" targetFramework="net45" />
  <package id="ServiceStack.Common" version="5.1.0" targetFramework="net45" />
  <package id="ServiceStack.Interfaces" version="5.1.0" targetFramework="net45" />
  <package id="ServiceStack.Redis" version="5.1.0" targetFramework="net45" />
  <package id="ServiceStack.Text" version="5.1.0" targetFramework="net45" />
当客户端发出请求时,将调用此路由

GET http://endpoint:1310/name/clients/C1/sites/G1 
(港口和航线不重要,只是示例)。我们收到一个错误请求,错误响应如下

{
  "ResponseStatus": {
    "ErrorCode": "ArgumentException",
    "Message": "Could not find property Path on S3Request",
    "StackTrace": "  at ServiceStack.Host.RestPath.CreateRequest (System.String pathInfo, System.Collections.Generic.Dictionary`2[TKey,TValue] queryStringAndFormData, System.Object fromInstance) [0x000c9] in <629ec152372546cf812fe4a698c7a784>:0 \n  at ServiceStack.Host.RestHandler.CreateRequest (ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IRestPath restPath, System.Collections.Generic.Dictionary`2[TKey,TValue] requestParams, System.Object requestDto) [0x0001e] in <629ec152372546cf812fe4a698c7a784>:0 \n  at ServiceStack.Host.ServiceController+<>c__DisplayClass26_0.<RegisterService>b__0 (ServiceStack.Web.IRequest req) [0x00035] in <629ec152372546cf812fe4a698c7a784>:0 \n  at ServiceStack.Host.Handlers.ServiceStackHandlerBase.GetCustomRequestFromBinder (ServiceStack.Web.IRequest httpReq, System.Type requestType) [0x00018] in <629ec152372546cf812fe4a698c7a784>:0 \n  at ServiceStack.Host.RestHandler.CreateRequestAsync (ServiceStack.Web.IRequest httpReq, ServiceStack.Web.IRestPath restPath) [0x00017] in <629ec152372546cf812fe4a698c7a784>:0 \n  at ServiceStack.Host.RestHandler+<ProcessRequestAsync>d__14.MoveNext () [0x00125] in <629ec152372546cf812fe4a698c7a784>:0 "
  }
}
{
“反应状态”:{
“错误代码”:“ArgumentException”,
“消息”:“在请求中找不到属性路径”,
“StackTrace”:“位于ServiceStack.Host.RestPath.CreateRequest(System.String pathInfo,System.Collections.Generic.Dictionary`2[TKey,TValue]queryStringAndFormData,System.Object fromInstance)[0x000c9]中:0\n位于ServiceStack.Host.RestHandler.CreateRequest(ServiceStack.Web.IRequest-httpReq,ServiceStack.Web.IRestPath-restPath,System.Collections.Generic.Dictionary`2[TKey,TValue]requestParams,System.Object requestDto)[0x0001e]in:0\n在ServiceStack.Host.ServiceController+c_udisplayClass26_0.b_u0(ServiceStack.Web.IRequest-req)[0x00035]in:0\n位于ServiceStack.Host.Handlers.ServiceStackHandlerBase.GetCustomRequestFromBinder(ServiceStack.Web.iRequestHttpReq,System.Type requestType)[0x00018]in:0\n位于ServiceStack.Host.RestHandler.CreateRequestAsync(ServiceStack.Web.iRequestHttpReq,ServiceStack.Web.IRestPath restPath)[0x00017]in:0\n位于ServiceStack.Host.RestHandler+d_u14.MoveNext()[0x00125]in:0“
}
}
在代码的以下区域中抛出了方法ServiceStack.Host.RestPath.CreateRequest(…)异常

for (int i = 0; i < this.TotalComponentsCount; i++) {
        string text = this.variablesNames [i];
        string key;
        if (text == null) {
                num++;
        } else if (!this.propertyNamesMap.TryGetValue (text.ToLower (), out key)) {
                if (!StringExtensions.EqualsIgnoreCase (Keywords.Ignore, text)) {
                        throw new ArgumentException ("Could not find property " + text + " on " + UrlExtensions.GetOperationName (this.RequestType));
                }
for(int i=0;i

CreateRequest方法似乎希望propertyNamesMap有一个路由条目,但它不在那里。我们想知道V5.1.0 API是否要求我们执行一些在V4.0.31中不必要的路径注册逻辑?

您的DTO缺少请求DTO上的
path
属性,每个变量在路由上,除了
{ignore}
需要匹配请求DTO上的属性。

多年来,我一直使用相同的构造,没有Path属性,并且在V5升级之前工作。必须在V5中进行更改!感谢您的回答,它可以工作。
for (int i = 0; i < this.TotalComponentsCount; i++) {
        string text = this.variablesNames [i];
        string key;
        if (text == null) {
                num++;
        } else if (!this.propertyNamesMap.TryGetValue (text.ToLower (), out key)) {
                if (!StringExtensions.EqualsIgnoreCase (Keywords.Ignore, text)) {
                        throw new ArgumentException ("Could not find property " + text + " on " + UrlExtensions.GetOperationName (this.RequestType));
                }