我的服务堆实现遇到了问题,我已经让以下请求url来调用我的服务并实现了一个perfmon类& perfmonservice类
[RestService("/perfmon/application/{appliationId}")]
[RestService("/perfmon/application/{appliationId}/{countername}")]
[RestService("/perfmon/user/{userId}")]
[RestService("/perfmon/user/{userId}/{countername}")]
现在,当我打电话给任何一个URL时,它会调用以下函数
public override object OnGet(Perfmon request)
{
return base.OnGet(request);
}
那么我怎么能在这里决定哪个URL进行了这个调用,weather servicestack提供了任何特定的方法来执行此操作,或者我需要通过检查属性来编写手动逻辑?
先谢谢
答案 0 :(得分:5)
只需检查请求DTO以查看填充了哪些字段,即
if (request.applicationId != null && request.countername != null) #2
if (request.userId != null && request.countername != null) #4
if (request.applicationId != null) #1
if (request.userid != null) #3
另请注意,用户也可以使用查询字符串填充请求dto,即如果他们打电话给您:
/perfmon/application/1/countername?userId=2
然后将填充所有字段。最后,您可以检索有关请求的信息,例如用于调用请求的绝对URI:
base.RequestContext.AbsoluteUri
最后,您可以使用以下命令获取IHttpRequest对象:
var httpReq = base.Request; //or with base.RequestContext.Get<IHttpRequest>();