2016-06-26 8 views
0

ich auf MVC5 arbeite, wo ich Web-Api-Controller verfügen, die Daten und Code zurückkehrt ist, wie untenKonsumieren IHttpActionResult von MVC-Controller

[Route("m/api/Group")] 
     [HttpGet] 
     public IHttpActionResult ListOfGroups() 
     { 
      try 
      { 
       var listOfGroups = GroupExecutor.GetListOfGroups(); 
       return Ok(listOfGroups); 
      } 
      catch (Exception ex) 
      { 
       LogClass.Logger.Error(ex.Message, ex); 
       return InternalServerError(); 
      } 
     } 

Wenn ich diese URL in Brower laufen, seine Daten korrekt im JSON-Format zurückkehren .

Jetzt möchte ich diese API Controller-Methode in einem Projekt durch MVC-Controller und Code verbrauchen ist als unten

[HttpPost] 
     [ValidateAntiForgeryHeader] 
     public ActionResult GetListOfGroups() 
     { 
      try 
      { 
       var listofGroups = new GroupController().ListOfGroups(); 
       return GetJsonContentResult(listofGroups); 
      } 
      catch (Exception ex) 
      { 
       LogClass.Logger.Error(ex.Message, ex); 
       return new HttpStatusCodeResult(HttpStatusCode.InternalServerError, Utility.GetDescriptionFromEnumValue(Helper.TypeOfError.ErrorOccuredWhileProcessingRequest)); 
      } 
     } 

Jetzt Wenn ich diesen Code ausführen zu api Methode geht aber bei der Wiedergabe an dem Controller, das geben Fehler zurückgegeben

Error getting value from 'Content Negotiation' on 'System.Web.Http.Results.OkNegotiatedContentResult 

Wie kann ich dieses Problem lösen?

EDIT:

public ContentResult GetJsonContentResult(object data) 
     { 
      var camelCaseFormatter = new JsonSerializerSettings(); 
      camelCaseFormatter.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
      var jsonResult = new ContentResult 
      { 
       Content = JsonConvert.SerializeObject(data, camelCaseFormatter), 
       ContentType = "application/json" 
      }; 
      return jsonResult; 
     } 
+0

Ich verstehe nicht, warum Sie Web API-Methode so in Ihrem Controller aufrufen müssen? – dotnetstep

+0

Da seine Funktion in MVC5 direkt API-Controller aufrufen .. keine Notwendigkeit, Client zu erstellen – Mahajan344

+0

Was macht Ihre GetJsonContentResult-Methode? – dotnetstep

Antwort

0
var controller = new MyAPIController(); 
var content = controller.GetMyAPIMethod(someParam); 
      var myModel = ((OkNegotiatedContentResult<MyObjectType>)(content.Result)).Content; 

MyAPIController Hier ist ur API-Controller ist GetMyAPIMethod ur API-Methode und MyObjectType Datentyp ist es zurückkehr. Verwenden Sie dies in Ihrem Controller und dies sollte funktionieren

1

Ich hoffe, dass Ihre Web-API immer konsistent Ergebnisse zurückgeben.

Ich gehe davon aus, dass es alle Tage

Ok(yourdata) 

Jetzt ist Ihre GetJsonContentResult Methode sollte wie folgt geändert. Geben Sie in dieser WebAPI OkNegoiatedContentResult zurück, und Sie müssen die Content-Eigenschaft lesen. Das habe ich mit Nachdenken getan. (Es gibt andere Möglichkeiten, es zu tun).

public ContentResult GetJsonContentResult(object data) 
     {    
      var camelCaseFormatter = new JsonSerializerSettings(); 
      camelCaseFormatter.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
      PropertyInfo pinfo = data.GetType().GetProperty("Content");    
      var jsonResult = new ContentResult 
      { 

       Content = JsonConvert.SerializeObject(pinfo.GetValue(data) , camelCaseFormatter), 
       ContentType = "application/json" 
      }; 
      return jsonResult; 
     }