Web API返回XML内容

本文关键字:内容 XML 返回 API Web | 更新日期: 2023-09-27 18:25:12

Web API:

 public int Post(MyModel m){
    return CreateTask(m);
 }

返回值:

Id:"<int xmlns="http://schemas.microsoft.com/2003/10/Serialization/">1446</int>"

我的问题:为什么web API会返回上面的Id。我需要它作为"1446"。我如何才能去掉这个xml部分?

Web API返回XML内容

WebApi项目在Global.asax中配置;在那里您可以找到一个名为WebApiConfig的类。在此类中,您将找到"媒体格式化程序";Media Formatters说明您的WebApi是否能够序列化/反序列化JSON System.Net.Http.Formatting.JsonMediaTypeFormatter()、XML或任何其他格式。

public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
           //...
            System.Web.Http.GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
            config.Formatters.Insert(0, new System.Net.Http.Formatting.JsonMediaTypeFormatter());
            config.Formatters.Insert(0, new System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter());

        }
    }

如果JSON格式化程序是列表中的第一项,它将是默认的序列化程序/反序列化程序。为了访问任何其他格式,请求的内容类型应明确指示所需的格式(如果支持),它将返回它,如果不支持,它将以默认格式返回它。

您看到的输出结果完全由所选媒体格式化程序正在使用的反序列化/序列化负责。

如果只想返回1446,则需要返回HttpResponseMessage,如下所示:

public HttpResponseMessage Post(Event_model event)
{
HttpResponseMessage TheHTTPResponse = new HttpResponseMessage();
TheHTTPResponse.StatusCode = System.Net.HttpStatusCode.OK;
TheHTTPResponse.Content = new StringContent(Event.CreateEvent(event).ToString(), Encoding.UTF8, "text");
return TheHTTPResponse;
}

如果全局更改配置,那么在实现需要返回其他格式的web服务时可能会出现问题。通过返回HttpResponseMessage,您只需担心正在处理的特定方法。

在您的请求中,将Accept标头设置为application/json:

Accept: application/json