我建议看一下ServiceStack routing。您的服务只有在匹配现有路由(或使用预定义路由)时才会被调用,这意味着如果您只有:
[Route("/hello/{name}")]
它不会匹配/hello/{name}/{id},并且不会调用您的服务。要匹配该路由,您可以为其设置显式路由,例如:
[Route("/hello/{name}/{id}")]
但这是您说要隐藏的公共信息。另一种方法是使用通配符路由,例如:
[Route("/hello/{name*}")]
匹配任何/hello/*路线公司。/hello, /hello/foo, /hello/foo/id, /hello/foo/id/and/more/etc.
但是,在您的Hello.Name属性中填充的内容将是foo/id您必须在服务中检测和解析的内容。
另一种方法是在 QueryString 或 POST 表单参数中提供隐藏的 id,您可以在 ServiceStack 中使用它来进一步填充任何请求 DTO,例如使用原始路由:
[Route("/hello/{name}")]
/route/foo?id=secret如果您的 Request DTO 有一个id属性,将让您调用该服务secret。如果您没有(或不想)拥有 id 属性,您仍然可以使用以下方式访问参数:
base.Request.QueryString["id"];
base.Request.FormData["id"];
但是由于您希望将其隐藏,您可能应该避免将其传递到每个人都可见的 url(包括网络代理、http 日志和其他中间件)。隐藏参数的更好地方是将其作为自定义 HTTP 标头传递,例如:X-id: secret您可以通过以下方式在服务中访问它:
base.Request.Headers["X-id"];