付款服务提供商将表格发布到我们网站中的ServiceStack网址。
我们的ServiceStack操作的正常实现模式是创建一个请求DTO,给它一些属性并指定一个[Route(" / blah / blah"," POST")]属性请求DTO,create和Get或Post方法在服务中指定请求DTO作为唯一的方法参数。
此模式有效,但我发现发布给我们的字段各不相同,因此我现在需要将表单发布的值作为名称 - 值集合进行访问。
我该怎么做?有什么潜在的选择?
只是猜测,但我的请求DTO可以从一些公开名称 - 值集合的ServiceStack基类继承。也许使用拦截器来提取名称值并将它们注入我的请求DTO。
寻找难的例子。
答案 0 :(得分:3)
服务处理程序从中继承的Service
类提供对Request
类中base
对象的访问。这样,您就可以访问FormData
,INameValueCollection
本质上是您要查找的名称/值。
因此,您的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"]
类似地访问它们。
如果您想按键名找到一个值,但是您不知道该值是否在QueryString
,FormData
,Cookies
或Items
集合中可以使用base.Request.GetParam("keyname");
方法。 按照给定的顺序进行评估,从左到右
有关详细信息,请参阅Access HTTP specific features in services文档。
我希望有所帮助。