从Razor调用ServiceStack服务

wil*_*ler 3 servicestack

这里有一个边缘案例:我需要从razor(同一个网站)调用servicestack服务现在我正在做

CheckIfConfiguredResponse aResponse= new JsonServiceClient("http:\\localhost:2000").Get<CheckIfConfiguredResponse>("/CheckIfConfigured"); 
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?还是更好?此外,如何消除必须手动指定Web地址并让它自动填充主机(因为它是相同的网站)

先谢谢,威尔.

myt*_*thz 6

您永远不想仅仅为了调用ServiceStack服务而向自己发出HTTP回调.

与其他框架不同,ServiceStack中的服务只是自动连接的C#类型,您可以像其他所有已注册的IOC依赖项一样从IOC访问这些类型.即在Razor View中你可以简单地解决它并直接从IOC调用它:

var response = base.Get<CheckIfConfiguredService>().Get(new CheckIfConfigured());
Run Code Online (Sandbox Code Playgroud)

这解析并调用服务,就像普通的自动连线C#依赖项一样,但不会注入当前请求上下文.如果您的服务确实需要它,您可以改为使用AppHostBase.ResolveService,例如:

var response = AppHostBase
  .ResolveService<CheckIfConfiguredService>(HttpContext.Current)
  .Get(new CheckIfConfigured());
Run Code Online (Sandbox Code Playgroud)