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

时间:2015-04-02 02:01:42

标签: servicestack

付款服务提供商将表格发布到我们网站中的ServiceStack网址。

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

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

我该怎么做?有什么潜在的选择?

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

寻找难的例子。

1 个答案:

答案 0 :(得分:3)

服务处理程序从中继承的Service类提供对Request类中base对象的访问。这样,您就可以访问FormDataINameValueCollection本质上是您要查找的名称/值。

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

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集合中可以使用base.Request.GetParam("keyname");方法。 按照给定的顺序进行评估,从左到右

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

我希望有所帮助。