0

因此,在我们旧的 WCF 休息服务中,我们有一个帮助类,它将查看响应对象并运行接口成员 GetStatus 来检索状态代码,然后将其设置为 WebOperationContext。在 web api 中,这不再可能,因此我们正在研究DelegatingHandler是否可以设置它。这是场景:

并非所有 POST 都会生成201 - Created代码。例如,一些用于具有复杂参数的 GET 类型操作。但是,某些 POST 操作将导致 201。在我们的响应对象中,我们有一个调用的接口,该接口IResult有一个方法,该方法GetResult()返回一个 HttpStatus 代码,该代码在操作期间运行的业务逻辑中设置。因此,如果我们要运行服务操作(帖子)

var result = AdvancedSearch(myPayload);

然后运行result.GetResult(),它将返回HttpStatus200。但是,如果我们要运行

var result = AddNewUser(myPayload);

然后运行result.GetResult();它将返回HttpStatus201

现在,在这些应该返回 201 的操作中,我只需从request.CreateResponse(...);创建一个新的响应对象。控制器本身的方法。但是,团队中的一些更高级的家伙不喜欢它。他们想要一个核心来处理这个问题。类似于我们之前的东西。

由于没有设置响应代码的全局上下文,我想我会尝试通过创建一个DelegatingHandler. 我知道您可以处理该Continue方法中的响应,但是,我不确定这是否可行。我意识到这个方法在实际 MVC 框架之外的不同管道中运行;我看不到任何从接口检索响应有效负载并从接口HttpResponseMessage运行方法的方法。GetResult()IResult

这可能吗?还有其他方法可以做到这一点吗?我是否卡在控制器中设置响应(实际上,我对此表示满意。我只是在尽职调查)。

TIA

4

1 回答 1

1

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

于 2013-02-18T20:01:59.833 回答