【发布时间】:2018-07-04 12:23:10
【问题描述】:
我已经为这个问题苦苦挣扎了几个小时。我有一个 ServiceStack 服务,其中只有 GET-Requests 有效。
这些是我的路线:
[Route("/test", "POST")]
public class TestRequest : IReturnVoid { }
[Route("/test2", "GET")]
public class TestRequest2 : IReturnVoid { }
还有我的服务:
public void Post(TestRequest request)
{
Console.WriteLine("Doesnt Work!");
}
public void Get(TestRequest2 request)
{
Console.WriteLine("Works!");
}
它非常简单。我没有配置任何 RequestFilters。这是我的配置方法:
public AppHost() : base(nameof(LogService), typeof(ServiceInterface.Services.LogService).Assembly) { }
public override void Configure(Container container)
{
//container.Register(c => new LoggingService()).ReusedWithin(ReuseScope.Container);
container.Register<IUserAuthRepository>(c => new LogUserAuthRepository());
container.Register<ICacheClient>(new MemoryCacheClient());
InitLogContext();
//Add Plugins
var authFeature = new AuthFeature
(
() => new AuthUserSession(),
new IAuthProvider[]
{
new CredentialsAuthProvider()
}
)
{ IncludeAssignRoleServices = false };
base.Plugins.Add(authFeature);
base.Plugins.Add(new ServiceStack.ProtoBuf.ProtoBufFormat());
//Disable Cookies
SetConfig(new HostConfig
{
AllowSessionCookies = false
});
base.GlobalResponseFilters.Add((req, res, obj) =>
{
// Handle void responses -> http://stackoverflow.com/questions/25260549/how-to-return-http-204-response-on-successful-delete-with-servicestack
if (obj == null && res.StatusCode == 200)
{
res.StatusCode = (int)HttpStatusCode.NoContent;
res.StatusDescription = "No Content";
}
});
}
很抱歉,我无法提供更多信息。我已经使我的整个代码尽可能简单。在同一个程序集中创建另一个服务没有锻炼 -> 相同的结果。
有谁知道为什么会发生这种情况以及我该如何解决这个问题?谢谢$
编辑:使用这个:
[Route("/test")]
public class TestRequest : IReturnVoid, IPost { }
而不是上面的代码给了我以下异常:
NotImplementedException:在 Service LogService 上找不到名为 Get(TestRequest) 或 Any(TestRequest) 的方法
StackTrace:在 ServiceStack.Host.ServiceExec 1.Execute(IRequest request, Object instance, Object requestDto, String requestName) 在 ServiceStack.Host.ServiceRequestExec 2.Execute(IRequest requestContext, Object instance, Object request) 在 ServiceStack.Host .ServiceController.ManagedServiceExec(ServiceExecFn serviceExec, IService service, IRequest request, Object requestDto) at ServiceStack.Host.ServiceController.c__DisplayClass37_0.b__0(IRequest req, Object dto) at ServiceStack.Host.ServiceController.ExecuteAsync(Object requestDto, IRequest req ) 在 ServiceStack.Host.RestHandler.ProcessRequestAsync(IRequest req, IResponse httpRes, String operationName)
【问题讨论】:
-
你是如何测试的?什么客户端代码?当你说“不工作”时,那是怎么回事?你有错误吗?电脑会不会死机?电脑会厌恶地走开吗?盖世太保会来抢你的电脑吗?
标签: servicestack