【问题标题】:How to validate web api response如何验证 Web api 响应
【发布时间】:2017-02-23 09:30:45
【问题描述】:

我正在开发一个需要验证返回的响应的 web api。我想编写一些通用代码来确保从 api 返回的响应格式正确。

基本上有一些字段,如状态、备注等,如果这些字段为空或无效,则应该在响应中出现,那么我应该返回一些错误代码,但不知道如何实现这一点,有人可以在这里指导我吗?提前致谢。

谢谢, 苏达摩

【问题讨论】:

  • 不清楚您是如何生成响应的,也不清楚您生成的是什么类型的响应。例如,您是否从模型生成响应并将其格式化为 JSON?
  • 嗨,Shaun,我已经编写了自定义输入/输出格式化程序以在 asp.net core web api 中接受/返回soap+xml。我正在使用全局过滤器验证请求,但不确定如何为输出实现相同的效果。
  • 您可以为此使用结果过滤器。 docs.asp.net/en/latest/mvc/controllers/…
  • w3.org/2001/XMLSchema" xmlns:xsi="w3.org/2001/XMLSchema-instance" xmlns="@987654324 @"> mywebsite.com/GBPortal"> 示例备注。null
  • 为什么要在生成响应后验证响应,并在运行时验证?这样的验证器会是什么样子?您想要每种响应类型的验证器吗?听起来您应该使用单元测试来验证您的代码在开发过程中输出正确的结构。

标签: asp.net-web-api asp.net-core asp.net-core-1.0 asp.net-core-webapi asp.net-core-middleware


【解决方案1】:

以下内容可能对您有用。它假定您使用的是ObjectResult,尽管您可以将其调整为您实际使用的IActionResult 实现。以下不是生产代码;相反,它让您了解您可以做什么。

public class MyResultFilter : IResultFilter
{
    public void OnResultExecuted(ResultExecutedContext context)
    {

    }

    public void OnResultExecuting(ResultExecutingContext context)
    {
        var result = context.Result as ObjectResult;
        var value = result.Value as MyCustomType;
        if (!IsValid(value) 
        {
            context.Result = new StatusCodeResult(500);
        }
    }

    private bool IsValid(MyCustomType value) 
    {
        return value != null && 
            value.Status != null &&
            value.Remarks != null;
    }
}

【讨论】:

  • context 只有动作描述符、HttpContext、Filter、RouteData、ModelState 和 Result 属性所以不知道如何访问自定义属性,很抱歉问了太多问题
  • @SudamaTripathi 您要访问哪些自定义属性?
  • 如果我正在检查 context.result,我会看到内容类型、delcared 类型、formtters、状态代码和值,其中我的自定义 POCO 对象对访问属性有任何建议
  • 我在之前的评论中发布了示例回复。这是具有状态、备注的序列化肥皂消息,我想访问这些属性的值
  • @SudamaTripathi 将Value 转换为对象的类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多