2017-08-14 26 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

這對我來說不起作用,因爲我的消費者期望將單個字符串作爲響應,而不是鍵/值對。 :( –