【问题标题】:How do I get ASP.NET Web API to return JSON instead of XML using Chrome?如何让 ASP.NET Web API 使用 Chrome 返回 JSON 而不是 XML?
【发布时间】:2012-04-08 12:09:44
【问题描述】:

使用较新的 ASP.NET Web API,在 Chrome 中我看到 XML - 我如何将其更改为请求 JSON 所以我可以在浏览器中查看吗?我确实相信它只是请求标头的一部分,我是否正确?

【问题讨论】:

标签: json google-chrome asp.net-web-api


【解决方案1】:

注意:阅读此答案的 cmets,如果您使用 WebAPI 的默认错误处理,它可能会产生 XSS 漏洞

我只是在我的 MVC Web API 项目的 App_Start / WebApiConfig.cs 类中添加以下内容。

config.Formatters.JsonFormatter.SupportedMediaTypes
    .Add(new MediaTypeHeaderValue("text/html") );

这可确保您在大多数查询中获得 JSON,但您可以在发送 text/xml 时获得 XML

如果您需要将Content-Type 回复为application/json,请查看Todd's answer below

NameSpace 正在使用System.Net.Http.Headers

【讨论】:

  • 这是一个令人惊讶的被忽视的答案,尽管最初的问题并不完全清楚,但这直接使 JSON 成为 Web 浏览器的默认响应(发送 Accept: text/html)。干得好。
  • +1 绝对是最佳答案。我想有很多人选择完全删除 XML 只是因为他们在浏览器中看不到 JSON。
  • 我发现当我这样做时,第三方提供的带有 HTML 中断标签的数据以回车结束。然后 JSON 无效。如果这会影响到您,最好使用已接受的答案。
  • 请注意,响应的 Content-Type 标头仍将是 text/html
  • 这太可怕了。响应内容类型标头应为 application/json。这个“解决方案”使它成为 text/html。
【解决方案2】:

如果您在 WebApiConfig 中执行此操作,您将默认获得 JSON,但如果您将 text/xml 作为请求 Accept 标头传递,它仍然允许您返回 XML。

注意:这将删除对application/xml 的支持

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
        config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
    }
}

如果您没有使用 MVC 项目类型,因此一开始就没有此类,请see this answer 了解如何合并它的详细信息。

【讨论】:

  • 请注意,原始行为是正确的。 Chrome 请求优先级为 0.9 的 application/xml 和优先级为 0.8 的 */*。通过删除 application/xml,您将删除 Web API 在客户端特别请求时返回 XML 的能力。例如如果您发送“Accept: application/xml”,您将仍然收到 JSON。
  • 是我,还是第一句话不对?该代码似乎完全删除了 XML,而不是简单地更改默认值。
  • @NickG:一个在这里被忽略的解决方案,恕我直言,这是一个更好的选择(保持 application/xml)是 Felipe Leusin 在此页面上提出的解决方案。使用 config.Formatters.XmlFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
  • 那么,我们如何通过 web config 做到这一点,以便我们默认获取 json 和 XML 如果请求?
  • @Felipse Leusin 下面的回答实际上更短,效果更好。
【解决方案3】:

使用 RequestHeaderMapping 效果更好,因为它还在响应标头中设置 Content-Type = application/json,这允许 Firefox(带有 JSONView 插件)将响应格式化为 JSON。

GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings
.Add(new System.Net.Http.Formatting.RequestHeaderMapping("Accept", 
                              "text/html",
                              StringComparison.InvariantCultureIgnoreCase,
                              true, 
                              "application/json"));

【讨论】:

  • 这是最精简和最简单的解决方案,Fiddler 还会检测到作为 josn 返回的内容类型。
  • 不错!你会建议把它放在代码的什么地方?
  • 它应该进入 WebApiConfig.cs
  • 为我工作。我需要添加一个 using System.Net.Http.Formatting;
  • 明确地说,这只是更改了默认值。只需包含相关的“Accept”标头,您就可以随时获取 JSON 或 XML。
【解决方案4】:

我最喜欢Felipe Leusin's approach - 确保浏览器在不影响来自实际需要 XML 的客户端的内容协商的情况下获取 JSON。对我来说唯一缺少的是响应标头仍然包含内容类型:text/html。为什么这是个问题?因为我使用检查内容类型的JSON Formatter Chrome extension,但我没有得到我习惯的漂亮格式。我用一个简单的自定义格式化程序来解决这个问题,它接受 text/html 请求并返回 application/json 响应:

public class BrowserJsonFormatter : JsonMediaTypeFormatter
{
    public BrowserJsonFormatter() {
        this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
        this.SerializerSettings.Formatting = Formatting.Indented;
    }

    public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) {
        base.SetDefaultContentHeaders(type, headers, mediaType);
        headers.ContentType = new MediaTypeHeaderValue("application/json");
    }
}

像这样注册:

config.Formatters.Add(new BrowserJsonFormatter());

【讨论】:

  • 如果你希望它在没有浏览器扩展的情况下打印得漂亮,请在构造函数中添加this.SerializerSettings.Formatting = Formatting.Indented;
  • 你为什么要它漂亮地打印在电线上?
  • @dmit77 的Answer 不是比这个更好(更简洁)吗?
  • @eddiegroves 你不想在电线上打印漂亮的东西。您希望服务器通过线路发送最少的位(即:没有空格)。然后你希望浏览器用插件等很好地格式化它。 Javascript通常需要解析JSON,为什么要引入不必要的格式来让它变慢
  • 对于正在寻找的谷歌人:不要忘记添加using System.Net.Http.Formattingusing Newtonsoft.Json
【解决方案5】:

MVC4 快速提示 #3 - 从 ASP.Net Web API 中删除 XML 格式化程序

Global.asax 中添加一行:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

像这样:

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    RegisterGlobalFilters(GlobalFilters.Filters);
    RegisterRoutes(RouteTable.Routes);

    BundleTable.Bundles.RegisterTemplateBundles();
    GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}

【讨论】:

  • 工作 - 使用 JSON 代替 XML 会更好。
  • 但是你还能返回xml吗?
  • 我测试过,你不能。所以这是删除 XML 支持.. 亲爱的谷歌人,请注意
  • @GlennSlaven 是的,你的答案应该是正确的答案。
【解决方案6】:

WebApiConfig.cs中,添加到Register函数的末尾:

// Remove the XML formatter
config.Formatters.Remove(config.Formatters.XmlFormatter);

Source.

【讨论】:

  • 在 MVC5 中,这可以通过将 config 替换为 GlobalConfiguration.Configuration 来完成
  • 对于必须只支持 JSON 并且在任何情况下都不允许发出 XML 的项目,这是迄今为止最好的选择。
  • config.Formatters.Add(config.Formatters.JsonFormatter);
  • 这太糟糕了。 -- 无论如何,这将始终返回 JSON,即使客户端在 Content-Type 标头中特别要求 XML。
  • 没有像 JSON 版本那样彻底测试 API 的 XML 版本的项目应该选择这个。根据 Michael 包含的链接,不同的格式化程序对对象进行不同的序列化。例如:XML 格式化程序不会序列化只读字段,而 JSON 格式化程序会。
【解决方案7】:

Global.asax 中,我使用下面的代码。我获取 JSON 的 URI 是 http://www.digantakumar.com/api/values?json=true

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new  QueryStringMapping("json", "true", "application/json"));
}

【讨论】:

【解决方案8】:

看看 WebAPI 中的内容协商。这些 (Part 1 & Part 2) 非常详细和透彻的博客文章解释了它是如何工作的。

简而言之,您是对的,只需要设置AcceptContent-Type 请求标头即可。鉴于您的操作未编码为返回特定格式,您可以设置Accept: application/json

【讨论】:

  • "这样我就可以在浏览器中查看了"
  • @Spongman,是的,你可以。但是使用 REST Client 之类的扩展 - 大多数浏览器都有类似的。在浏览器中直接输入 url 是 1. 限制太多(无法控制标题,无法发布数据等); 2. 不正确 - 浏览器没有像预期的那样使用 web api - 你不能依赖它来正确地测试它。所以,再一次,一个好的 REST 客户端插件可以解决这个问题。
【解决方案9】:

由于问题是特定于 Chrome 的,您可以获取Postman extension,它允许您设置请求内容类型。

【讨论】:

  • 在 Firefox 中,只需转到 about:config,搜索 accept.default 并将 network.http.accept.default 配置的内容更改为 text/html,application/xhtml+xml,application/json;q=0.9,application/xml;q=0.8,*/*;q=0.7
  • 或者更好的是,只需text/html,application/xhtml+xml;q=1.0,*/*;q=0.7 即可避免诸如 Bitbucket 之类的错误主机意外地为您的浏览器提供 JSON 来代替 HTML。
  • 网址已失效。一个新的是chrome.google.com/webstore/detail/postman/…
【解决方案10】:

一个快速的选择是使用 MediaTypeMapping 专业化。以下是在 Application_Start 事件中使用 QueryStringMapping 的示例:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.MediaTypeMappings.Add(new QueryStringMapping("a", "b", "application/json"));

现在只要 url 包含查询字符串 ?a=b 在这种情况下,Json 响应就会显示在浏览器中。

【讨论】:

  • 这非常有用。如果要使用 path.to/item.json,也可以使用 UriPathExtensionMapping 而不是 QueryStringMapping
【解决方案11】:

此代码使 json 成为我的默认值,并允许我使用 XML 格式。我将追加xml=true

GlobalConfiguration.Configuration.Formatters.XmlFormatter.MediaTypeMappings.Add(new QueryStringMapping("xml", "true", "application/xml"));
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));

谢谢大家!

【讨论】:

  • 这是最灵活的答案(现在确实应该是默认配置)。要添加到此答案,JSON 是默认值,包括来自浏览器。要查看 XML,请添加查询字符串:?xml=true
  • 尝试了多种策略。对 XML 和 JSON 进行了简单的测试,并且开箱即用
【解决方案12】:

不要使用您的浏览器来测试您的 API。

请尝试使用允许您指定请求的 HTTP 客户端,例如 CURL,甚至 Fiddler。

这个问题的问题在于客户端,而不是 API。根据浏览器的请求,Web API 行为正确。

【讨论】:

  • 为什么不用浏览器?这是一个显而易见的工具。
  • 我认为这里的观点是正确和重要的——如果问题是由客户端引起的,我们不应该过度修复应用程序的工作部分(MVC WebAPI 基础结构)。 Api 的真正用例是正确使用(通过提供正确的标头),这是应用程序的责任。不过,我不同意完全放弃浏览器——为了测试,几乎所有浏览器都有很多工具(从类似 Rest Client 的扩展开始)。
  • 这应该是一条评论。
【解决方案13】:

上面的大多数答案都很有意义。 由于您看到数据以 XML 格式格式化,这意味着应用了 XML 格式化程序,因此您只需从 HttpConfiguration 参数中删除 XMLFormatter 即可查看 JSON 格式,例如

public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );                
            config.Formatters.Remove(config.Formatters.XmlFormatter);                
            config.EnableSystemDiagnosticsTracing();
        }

因为 JSON 是默认格式

【讨论】:

    【解决方案14】:

    User-Agent 标头包含“Chrome”时,我使用全局操作过滤器删除了Accept: application/xml

    internal class RemoveXmlForGoogleChromeFilter : IActionFilter
    {
        public bool AllowMultiple
        {
            get { return false; }
        }
    
        public async Task<HttpResponseMessage> ExecuteActionFilterAsync(
            HttpActionContext actionContext,
            CancellationToken cancellationToken,
            Func<Task<HttpResponseMessage>> continuation)
        {
            var userAgent = actionContext.Request.Headers.UserAgent.ToString();
            if (userAgent.Contains("Chrome"))
            {
                var acceptHeaders = actionContext.Request.Headers.Accept;
                var header =
                    acceptHeaders.SingleOrDefault(
                        x => x.MediaType.Contains("application/xml"));
                acceptHeaders.Remove(header);
            }
    
            return await continuation();
        }
    }
    

    似乎有效。

    【讨论】:

      【解决方案15】:

      返回正确的格式是由媒体类型格式化程序完成的。 正如其他人提到的,您可以在 WebApiConfig 类中执行此操作:

      public static class WebApiConfig
      {
          public static void Register(HttpConfiguration config)
          {
              ...
      
              // Configure Web API to return JSON
              config.Formatters.JsonFormatter
              .SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
      
              ...
          }
      }
      

      更多信息,请查看:

      如果您的操作返回 XML(默认情况下是这种情况)并且您只需要一个特定的方法来返回 JSON,那么您可以使用 ActionFilterAttribute 并将其应用于该特定操作。

      过滤属性:

      public class JsonOutputAttribute : ActionFilterAttribute
      {
          public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
          {
              ObjectContent content = actionExecutedContext.Response.Content as ObjectContent;
              var value = content.Value;
              Type targetType = actionExecutedContext.Response.Content.GetType().GetGenericArguments()[0];
      
              var httpResponseMsg = new HttpResponseMessage
              {
                  StatusCode = HttpStatusCode.OK,
                  RequestMessage = actionExecutedContext.Request,
                  Content = new ObjectContent(targetType, value, new JsonMediaTypeFormatter(), (string)null)
              };
      
              actionExecutedContext.Response = httpResponseMsg;
              base.OnActionExecuted(actionExecutedContext);
          }
      }
      

      申请行动:

      [JsonOutput]
      public IEnumerable<Person> GetPersons()
      {
          return _repository.AllPersons(); // the returned output will be in JSON
      }
      

      请注意,您可以省略动作装饰上的 Attribute 一词,而仅使用 [JsonOutput] 而不是 [JsonOutputAttribute]

      【讨论】:

        【解决方案16】:

        我发现 Chrome 应用程序“高级 REST 客户端”非常适合与 REST 服务配合使用。您可以将 Content-Type 设置为 application/json 等: Advanced REST client

        【讨论】:

          【解决方案17】:

          根据最新版本的 ASP.net WebApi 2,

          WebApiConfig.cs 下,这将起作用

          config.Formatters.Remove(GlobalConfiguration.Configuration.Formatters.XmlFormatter);
          config.Formatters.Add(GlobalConfiguration.Configuration.Formatters.JsonFormatter);
          

          【讨论】:

            【解决方案18】:
                    config.Formatters.Remove(config.Formatters.XmlFormatter);
            

            【讨论】:

            • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。请阅读此stackoverflow.com/help/how-to-answer
            【解决方案19】:

            我不清楚为什么答案中存在所有这些复杂性。当然有很多方法可以做到这一点,使用 QueryStrings、标题和选项......但我认为最佳实践很简单。您请求一个纯 URL(例如:http://yourstartup.com/api/cars),作为回报,您会得到 JSON。你会得到带有正确响应头的 JSON:

            Content-Type: application/json
            

            在寻找同样问题的答案时,我找到了这个线程,并且不得不继续下去,因为这个接受的答案并不完全有效。我确实找到了一个我觉得太简单而不是最好的答案:

            Set the default WebAPI formatter

            我也会在这里添加我的提示。

            WebApiConfig.cs
            
            namespace com.yourstartup
            {
              using ...;
              using System.Net.Http.Formatting;
              ...
              config.Formatters.Clear(); //because there are defaults of XML..
              config.Formatters.Add(new JsonMediaTypeFormatter());
            }
            

            我确实有一个问题,即默认值(至少是我所看到的)来自哪里。它们是 .NET 默认值,还是可能在其他地方创建(由我项目中的其他人创建)。无论如何,希望这会有所帮助。

            【讨论】:

              【解决方案20】:

              你可以如下使用:

              GlobalConfiguration.Configuration.Formatters.Clear();
              GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
              

              【讨论】:

              • 如果您正在制作一个仅用于传递 JSON 消息的 WebAPI 应用程序,请考虑这个答案。
              【解决方案21】:

              这是一个类似于jayson.centeno's 和其他答案的解决方案,但使用来自System.Net.Http.Formatting 的内置扩展。

              public static void Register(HttpConfiguration config)
              {
                  // add support for the 'format' query param
                  // cref: http://blogs.msdn.com/b/hongyes/archive/2012/09/02/support-format-in-asp-net-web-api.aspx
                  config.Formatters.JsonFormatter.AddQueryStringMapping("$format", "json", "application/json");
                  config.Formatters.XmlFormatter.AddQueryStringMapping("$format", "xml", "application/xml");
              
                  // ... additional configuration
               }
              

              该解决方案主要面向在 WebApi 的早期版本中支持 OData 的 $format,但它也适用于非 OData 实现,并返回 响应中的Content-Type: application/json; charset=utf-8 标头。

              它允许您在使用浏览器进行测试时将 &amp;$format=json&amp;$format=xml 添加到 uri 的末尾。使用可以设置自己的标头的非浏览器客户端时,它不会干扰其他预期行为。

              【讨论】:

                【解决方案22】:

                只需在您的 WebApiConfig 类中添加这两行代码

                public static class WebApiConfig
                {
                     public static void Register(HttpConfiguration config)
                     {
                          //add this two line 
                          config.Formatters.Clear();
                          config.Formatters.Add(new JsonMediaTypeFormatter());
                
                
                          ............................
                      }
                }
                

                【讨论】:

                  【解决方案23】:

                  您只需像这样更改App_Start/WebApiConfig.cs

                  public static void Register(HttpConfiguration config)
                      {
                          // Web API configuration and services
                  
                          // Web API routes
                          config.MapHttpAttributeRoutes();
                          //Below formatter is used for returning the Json result.
                          var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
                          config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
                          //Default route
                          config.Routes.MapHttpRoute(
                             name: "ApiControllerOnly",
                             routeTemplate: "api/{controller}"
                         );
                      }
                  

                  【讨论】:

                  • 删除格式化程序通常不是一个好主意,您正在删除功能。
                  • 实际上在这种情况下,它对我来说效果很好,还有很多其他人建议这样的方式。我是从myview.rahulnivi.net/building-spa-angular-mvc-5 book 学来的!
                  【解决方案24】:

                  来自 MSDN Building a Single Page Application with ASP.NET and AngularJS(大约 41 分钟)。

                  public static class WebApiConfig
                  {
                      public static void Register(HttpConfiguration config)
                      {
                          // ... possible routing etc.
                  
                          // Setup to return json and camelcase it!
                          var formatter = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
                          formatter.SerializerSettings.ContractResolver =
                              new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
                      }
                  

                  应该是最新的,我试过了,效果很好。

                  【讨论】:

                    【解决方案25】:

                    自从提出(并回答)这个问题已经过去了一段时间,但另一个选择是在请求处理期间使用 MessageHandler 覆盖服务器上的 Accept 标头,如下所示:

                    public class ForceableContentTypeDelegationHandler : DelegatingHandler
                    {
                        protected async override Task<HttpResponseMessage> SendAsync(
                                    HttpRequestMessage request,
                                    CancellationToken cancellationToken)
                        {
                            var someOtherCondition = false;
                            var accHeader = request.Headers.GetValues("Accept").FirstOrDefault();
                            if (someOtherCondition && accHeader.Contains("application/xml"))
                            {
                                request.Headers.Remove("Accept");
                                request.Headers.Add("Accept", "application/json");
                            }
                            return await base.SendAsync(request, cancellationToken);
                        }
                    }
                    

                    someOtherCondition 可以是任何东西,包括浏览器类型等。这适用于有条件的情况,我们只是有时想要覆盖默认的内容协商。否则,根据其他答案,您只需从配置中删除不必要的格式化程序。

                    您当然需要注册它。您可以在全局范围内执行此操作:

                      public static void Register(HttpConfiguration config) {
                          config.MessageHandlers.Add(new ForceableContentTypeDelegationHandler());
                      }
                    

                    或逐条路线:

                    config.Routes.MapHttpRoute(
                       name: "SpecialContentRoute",
                       routeTemplate: "api/someUrlThatNeedsSpecialTreatment/{id}",
                       defaults: new { controller = "SpecialTreatment" id = RouteParameter.Optional },
                       constraints: null,
                       handler: new ForceableContentTypeDelegationHandler()
                    );
                    

                    由于这是一个消息处理程序,它将在管道的请求和响应端运行,就像HttpModule。因此,您可以使用自定义标头轻松确认覆盖:

                    public class ForceableContentTypeDelegationHandler : DelegatingHandler
                    {
                        protected async override Task<HttpResponseMessage> SendAsync(
                                    HttpRequestMessage request,
                                    CancellationToken cancellationToken)
                        {
                            var wasForced = false;
                            var someOtherCondition = false;
                            var accHeader = request.Headers.GetValues("Accept").FirstOrDefault();
                            if (someOtherCondition && accHeader.Contains("application/xml"))
                            {
                                request.Headers.Remove("Accept");
                                request.Headers.Add("Accept", "application/json");
                                wasForced = true;
                            }
                    
                            var response =  await base.SendAsync(request, cancellationToken);
                            if (wasForced){
                              response.Headers.Add("X-ForcedContent", "We overrode your content prefs, sorry");
                            }
                            return response;
                        }
                    }
                    

                    【讨论】:

                      【解决方案26】:

                      这是我在应用程序中使用的最简单的方法。在Register函数中的App_Start\\WebApiConfig.cs中添加以下3行代码

                          var formatters = GlobalConfiguration.Configuration.Formatters;
                      
                          formatters.Remove(formatters.XmlFormatter);
                      
                          config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
                      

                      Asp.net Web API 会自动将您返回的对象序列化为 JSON,并在标头中添加 application/json,以便浏览器或接收者了解您正在返回 JSON 结果。

                      【讨论】:

                        【解决方案27】:

                        多年来一直使用 Felipe Leusin 的答案,在最近更新核心库和 Json.Net 之后,我遇到了 System.MissingMethodException:SupportedMediaTypes。 在我的情况下,希望对遇到同样意外异常的其他人有所帮助的解决方案是安装System.Net.Http。 NuGet 在某些情况下显然会删除它。手动安装后,问题得到解决。

                        【讨论】:

                          【解决方案28】:

                          WebApiConfig 是您可以配置是否要以 json 或 xml 输出的地方。默认情况下,它是 xml。在 register 函数中,我们可以使用 HttpConfiguration Formatters 来格式化输出。

                          需要System.Net.Http.Headers =&gt; MediaTypeHeaderValue("text/html")才能得到json格式的输出。

                          【讨论】:

                            【解决方案29】:

                            我很惊讶地看到这么多回复需要编码来更改 one API 中的单个用例 (GET),而不是使用必须安装一次且可用于任何 API(自己的或第 3 方)和所有用例。

                            所以最好的答案是:

                            1. 如果您只想请求json或其他内容类型,请安装Requestly或类似工具并修改Accept header。
                            2. 如果您也想使用 POST 并拥有格式良好的 json、xml 等,请使用适当的 API 测试扩展,例如 PostmanARC

                            【讨论】:

                            • 有些人更喜欢在不增加额外工具和库形式的膨胀的情况下做事。
                            • 仅仅因为某人使用了错误的工具来完成这项工作,而对 API 进行更改仍然是错误的。 Web 浏览器的设计目的不是测试 API,甚至不是查看 API 的输出,而是查看文档。如果有人认为 API 测试工具过于臃肿,而不是任何 API 开发人员的必备工具包的一部分,那就更糟了,老实说,我也会添加前端开发人员,因为他们也需要与 API 进行交互和试验。这也可能还不够,因为没有插件的浏览器不允许设置标头、发布到 API 甚至检查响应标头。
                            • 我明白你在说什么,你没有错。但只是题外话,你被否决的原因是你回答问题的语气。你听起来非常好斗,给人的印象是那个认为他们无所不知的开发人员,这非常令人反感。从您的回答来看,我确信您是一位出色的开发人员。但是,您必须学习,尤其是在这样的专业 QA 环境中,以更友好、更人性化的方式解决和说服人们。也许,首先给出他们想要的答案,然后解释更好的方法,并激发为什么它更好。
                            猜你喜欢
                            • 2013-08-18
                            • 1970-01-01
                            • 2012-02-26
                            • 2023-04-05
                            • 1970-01-01
                            • 2012-06-20
                            • 1970-01-01
                            相关资源
                            最近更新 更多