2017-08-14 30 views
0

的我有这样的控制器方法的数组:网络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?

回答

0

看起来是处理字符串列表字符,以便您可以查询它。但是,您可以通过将您的操作更改为以下方式强制它认为其结果:

[HttpGet] 
[Route("SystemCheck/PulseCheck")] 
public SingleResult<string> PulseCheck() 
{ 
    var pulseCheck = PulseCheckHelper.PulseCheck(); 

    return SingleResult.Create(new[]{ pulseCheck }.AsQueryable()); 
} 
0

如果你可以改变你的响应的结构,你的动作更改为以下:

[HttpGet] 
[Route("SystemCheck/PulseCheck")] 
public object PulseCheck() 
{ 
    var pulseCheck = PulseCheckHelper.PulseCheck(); 
    return new { pulseCheck }; 
} 

这将回

{ pulseCheck: "3123" } 
+0

是否是答案? –

+0

这对我来说不起作用,因为我的消费者期望将单个字符串作为响应,而不是键/值对。 :( –