5

我的 servicestack 实现面临一个问题,我提出了以下请求 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 进行了此调用,天气服务堆栈提供了任何特定的方法来执行此操作,或者我需要通过检查属性来编写手动逻辑?

提前致谢

4

1 回答 1

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>();
于 2011-11-04T14:29:49.037 回答