1

サービス用に 2 つのルートをセットアップします。

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:おそらく私はこれを解決することができました。URLにプリプレディング/json/replyしていました。

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

content-type トークンと reply-type トークンの両方が必須だと思いました。

4

0 に答える 0