C# Web API赢得';t返回对象

C# Web API赢得';t返回对象,c#,asp.net-web-api,C#,Asp.net Web Api,我有一个非常简单的Web API应用程序。一切似乎都与基本类型一起工作。您不会发现任何奇特的身份验证或任何东西,但我可以在IIS Express上使用以下工具运行此功能: http://localhost:25095/Workbench/GetObject,或: http://localhost:25095/Workbench/GetNumber 启动此web应用程序时,我可以将浏览器指向GetNumber并在窗口中查看15。然而,当我指向GetObject时,我看到了WebAPI.Demo

我有一个非常简单的Web API应用程序。一切似乎都与基本类型一起工作。您不会发现任何奇特的身份验证或任何东西,但我可以在IIS Express上使用以下工具运行此功能:

  • http://localhost:25095/Workbench/GetObject,或:
  • http://localhost:25095/Workbench/GetNumber
启动此web应用程序时,我可以将浏览器指向GetNumber并在窗口中查看
15
。然而,当我指向GetObject时,我看到了
WebAPI.DemoApp.SampleObject
。这并不一定让我烦恼,只是我不知道为什么

我有一段代码(显示在下面),它可能会强制Web API返回JSON。因此,我希望GetNumber或GetObject返回类似(伪代码)的内容:

  • {15}
  • {姓名:JoeBob}
无论哪种方式,我的控制台应用程序的ReadAsTringAsync都会产生相同的结果,而ReadAsAsync会产生错误:

  • 没有MediaTypeFormatter可用于从媒体类型为“text/html”的内容中读取类型为“SampleObject”的对象
我的控制台应用程序非常简单:

static void Main(string[] args)
{

    using (var client = new HttpClient())
    {

        client.BaseAddress = new Uri("http://localhost:25095/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        //HttpResponseMessage response = client.GetAsync("Workbench/GetObject").Result;
        HttpResponseMessage response = client.GetAsync("Workbench/GetNumber").Result;

        //SampleObject getObject = response.Content.ReadAsAsync<SampleObject>().Result;
        var getNumber = response.Content.ReadAsStringAsync().Result;
        Console.WriteLine(getNumber);

        Console.Read();

    }
}

事实证明,要返回对象,您需要从
ApiController
继承,而不是从
Controller
继承。这也意味着我的应用程序必须具备:

GlobalConfiguration.Configure(WebApiConfig.Register);
并像在默认Web API应用程序中一样执行配置:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}
    [DataContract]
    public class SampleObject
    {
        [DataMember]
        public string Name { get; set; }
    }
GlobalConfiguration.Configure(WebApiConfig.Register);
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}