C# Web API赢得';t返回对象
我有一个非常简单的Web API应用程序。一切似乎都与基本类型一起工作。您不会发现任何奇特的身份验证或任何东西,但我可以在IIS Express上使用以下工具运行此功能: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
- http://localhost:25095/Workbench/GetObject,或:
- http://localhost:25095/Workbench/GetNumber
15
。然而,当我指向GetObject时,我看到了WebAPI.DemoApp.SampleObject
。这并不一定让我烦恼,只是我不知道为什么
我有一段代码(显示在下面),它可能会强制Web API返回JSON。因此,我希望GetNumber或GetObject返回类似(伪代码)的内容:
- {15}
- {姓名:JoeBob}
- 没有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 }
);
}
}