是否可以从委托处理程序设置“预期”响应代码?

时间:2013-02-18 18:58:16

标签: .net asp.net-mvc-4 asp.net-web-api

因此,在我们的旧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

1 个答案:

答案 0 :(得分:1)

HttpResponseMessage上有一个名为“TryGetContentValue”的扩展,您可以使用它来获取格式化程序序列化之前的响应内容。