变量占位符被忽略

时间:2013-05-27 21:00:50

标签: servicestack

我为我的服务设置了两条路线:

GET /foo
GET /foo/{Name}

元数据页面正确列出:

GET /foo
GET /foo/{Name}

但是当我浏览/baseurl/foo/NameValueHere时,我得到了

The operation 'NameValueHere' does not exist for this service

我是否在我的(自托管)apphost中遗漏了一些配置?

编辑:

其他信息

我不喜欢我的DTO上的Route属性,所以我为IServiceRoutes编写了一个简单的扩展方法。

public static IServiceRoutes AddFromServiceAttributes(this IServiceRoutes routes)
{
    var myServiceTypes = typeof(MyServiceBase).Assembly.GetDerivedTypesOf<MyServiceBase>();
    var routedMethods = myServiceTypes.SelectMany(type => type.GetMethodsWithAttribute<MyServiceRouteAttribute>());

    foreach (var routedMethod in routedMethods)
    {
        var routesFound = routedMethod.GetAttributes<MyServiceRouteAttribute>();

        foreach (var route in routesFound)
        {
            // request type can be inferred from the method's first param
            // and the same for allowed verbs from the method's name
            // [MyServiceRoute(typeof(ReqType), "/foo/{Name}", "GET")]
            // [MyServiceRoute("/foo/{Name}", "GET")]
            // [MyServiceRoute(typeof(ReqType), "/foo/{Name}")]

            if (route.RequestType == null)
            {
                route.RequestType = routedMethod.GetParameterListFromCache().First().ParameterType;
            }

            if (string.IsNullOrWhiteSpace(route.Verbs))
            {
                var upperRoutedMethodName = routedMethod.Name.ToUpperInvariant();
                route.Verbs = upperRoutedMethodName != "ANY" ? upperRoutedMethodName : null;
            }

            routes.Add(route.RequestType, route.RestPath, route.Verbs);
        }

    }

    return routes;
}

我在AppHost.Configure中调用此方法,以及AddFromAssembly

this.SetConfig(new EndpointHostConfig { ServiceStackHandlerFactoryPath = "service" });
// some container registrations here
this.Routes.AddFromServiceAttributes().AddFromAssembly();

让我感到困惑的是,元数据页面正确显示了路线。

DTO非常简单,它们包含Name字符串属性。

class Foo { public string Name { get; set; } }

编辑2: 我删除了MyServiceRouteAttribute属性并重用了ServiceStack的RouteAttribute。 请求DTO类型是从第一个方法参数推断出来的。

编辑3: 可能我设法解决了这个问题。我在网址中预先发布了/json/reply

http://localhost/service/json/reply/foo/NameValueHere <- not working
http://localhost/service/foo/NameValueHere <- working

我认为内容类型和回复类型令牌都是强制性的。

0 个答案:

没有答案