如何访问 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"]
.
类似地访问它们
如果您想通过键名查找值,但不知道该值是否在 QueryString
、FormData
、Cookies
或 Items
中collection 你可以使用 base.Request.GetParam("keyname");
方法。 按给定顺序计算,从左到右
有关详细信息,请参阅 Access HTTP specific features in services 文档。
希望对您有所帮助。
付款提供商正在向我们网站中的 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"]
:
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
中collection 你可以使用 base.Request.GetParam("keyname");
方法。 按给定顺序计算,从左到右
有关详细信息,请参阅 Access HTTP specific features in services 文档。
希望对您有所帮助。