因此,在我们的旧WCF休息服务中,我们有一个帮助器类,它将查看响应对象并运行接口成员GetStatus以检索状态代码,然后将其设置为WebOperationContext。在web api中,这已不再可能,因此我们正在调查DelegatingHandler
以设置此项。这是场景:
并非所有POST都会生成201 - Created
代码。例如,一些用于具有复杂参数的GET类型操作。但是,一些POST操作将导致201.在我们的响应对象中,我们有一个名为IResult
的接口,它有一个方法GetResult()
,它返回一个HttpStatus代码,该代码在运行期间运行的业务逻辑中设置操作。所以,如果我们要运行服务操作(post)
var result = AdvancedSearch(myPayload);
然后运行result.GetResult()
,它将返回HttpStatus
200。但是,如果我们要运行
var result = AddNewUser(myPayload);
然后运行result.GetResult()
;它将返回HttpStatus
的201
现在,在这些应返回201的操作中,我只需从request.CreateResponse(...)
创建一个新的响应对象;控制器本身的方法。然而,团队中一些更高级的人不喜欢它。他们想要一些中心来处理这个问题。类似于我们以前的东西。
由于没有用于设置响应代码的全局上下文,我想我会尝试通过创建DelegatingHandler
来实现此目的。我知道您可以使用Continue
方法处理响应,但是,我不确定这是否可行。我意识到这个方法在实际的MVC框架之外的不同管道中运行;我没有看到任何方法从HttpResponseMessage
检索响应有效负载,并从GetResult()
接口运行IResult
方法。
这可能吗?还有其他方法可以做到这一点吗?我是不是在控制器中设置响应(实际上我很好。我只是在进行尽职调查)。
TIA
答案 0 :(得分:1)
HttpResponseMessage上有一个名为“TryGetContentValue”的扩展,您可以使用它来获取格式化程序序列化之前的响应内容。