的我有这样的控制器方法的数组:网络API 2串响应返回为字符
[HttpGet]
[Route("SystemCheck/PulseCheck")]
public HttpResponseMessage PulseCheck()
{
//this is a string
var pulseCheck = PulseCheckHelper.PulseCheck();
var response = Request.CreateResponse((HttpStatusCode.OK), pulseCheck);
return response;
}
响应回来为: [ “2”, “2”, “9”, “9” ]而不是“2299”
任何想法?
我也试图像不同的变化:
[HttpGet]
[Route("SystemCheck/PulseCheck")]
[ResponseType(typeof(string))]
public string PulseCheck()
{
//this is a string
var pulseCheck = PulseCheckHelper.PulseCheck();
return pulseCheck;
}
但相同的结果。有没有我错过的WebApiConfig。我有其他应用程序可以使用相同的控制器方法代码正常工作,但无法识别配置差异。
这是我WebApiConfig:
public static void Register(HttpConfiguration config)
{
config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.MessageHandlers.Add(new Security.WebApi.AuthenticationHandler());
config.Services.GetFilterProviders().ToList().ForEach(provider => config.Services.Remove(typeof(System.Web.Http.Filters.IFilterProvider), provider));
config.Services.Add(typeof(System.Web.Http.Filters.IFilterProvider), new OrderedFilterProvider());
config.Filters.Add(new ExceptionHandlingAttribute());
config.Filters.Add(new InspectActionContextFilter());
config.Filters.Add(new NewRelicFilter());
config.Filters.Add(new EnableQueryAttribute
{
PageSize = DefaultPageSize,
EnsureStableOrdering = false
});
}
更新:好像罪魁祸首是WebApiConfig注册下面的代码:
config.Filters.Add(new EnableQueryAttribute
{
PageSize = DefaultPageSize,
EnsureStableOrdering = false
});
这是支持对所有控制器方法的OData查询。如果我删除这些行,然后我得到正确的回应“2299”。现在我的问题是,如何禁用我的特定控制器方法的OData?
是否是答案? –
这对我来说不起作用,因为我的消费者期望将单个字符串作为响应,而不是键/值对。 :( –