如何访问 ServiceStack 请求处理程序中的表单发布值

How To Access Form Posted Values In ServiceStack Request Handler

付款提供商正在向我们网站中的 ServiceStack URL 发送值。

我们ServiceStack操作的正常实现模式是创建一个请求DTO,给它一些属性并在请求DTO上指定一个[Route("/blah/blah","POST")]属性, 在服务中创建和获取或 Post 方法,将请求 DTO 指定为唯一的方法参数。

此模式有效,但我发现发布给我们的字段各不相同,因此我现在需要访问表单发布的值作为名称-值集合。

我该怎么做?有哪些可能的替代方案?

只是猜测,但我的请求 DTO 可以继承自某些公开名称-值集合的 ServiceStack 基础 class。也许使用拦截器来提取名称值并将它们注入到我的请求 DTO 中。

正在寻找困难的例子。

您的服务处理程序继承的 Service class 提供对 base class 中的 Request 对象的访问。这允许您访问 FormData,这是一个 INameValueCollection,本质上是您正在寻找的 name/values。

因此,鉴于您的 PaymentService 继承自 ServiceStack.Service。在您的处理程序方法(例如 Post(PaymentRequest request))中,您可以使用 base.Request.FormData["keyname"]:

访问 name/value 集合
public class PaymentService : Service
{
    public void Post(PaymentRequest request)
    {
        // To access using the request DTO
        var amount = request.Amount;

        // To access the form values directly (from name/value collection)
        var tax = base.Request.FormData ["tax"];

        // To access the query string value of currency `?currency=USD`
        var currency = base.Request.QueryString ["currency"];

        // To access a value that may be form data, query string, cookie
        var item = base.Request.GetParam("item");
    }
}

如果请求发送查询字符串参数,您也可以使用 base.Request.QueryString["keyname"].

类似地访问它们

如果您想通过键名查找值,但不知道该值是否在 QueryStringFormDataCookiesItems 中collection 你可以使用 base.Request.GetParam("keyname"); 方法。 按给定顺序计算,从左到右

有关详细信息,请参阅 Access HTTP specific features in services 文档。

希望对您有所帮助。