我正在使用MVC5,我有web Api控制器,它返回数据和代码如下
[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));
}
}
如果我在浏览器中运行此url,则以json格式正确返回数据。
现在我想通过MVC控制器在同一个项目中使用这个API控制器方法,代码如下
Error getting value from 'Content Negotiation' on 'System.Web.Http.Results.OkNegotiatedContentResult
现在,当我运行此代码时,转到api方法,但当返回到控制器时,它给出了错误
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;
}
我该如何解决这个问题?
编辑:
{{1}}
答案 0 :(得分:1)
我希望您的网络API在返回结果时始终保持一致。
我认为它总是
Ok(yourdata)
现在你的GetJsonContentResult方法应该按照以下方式进行修改。在此,您的WebAPI返回OkNegotiatedContentResult,并且您必须阅读Content属性。我已经完成了反思。 (还有其他方法可以做到)。
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;
}
答案 1 :(得分:0)
var controller = new MyAPIController();
var content = controller.GetMyAPIMethod(someParam);
var myModel = ((OkNegotiatedContentResult<MyObjectType>)(content.Result)).Content;
这里MyAPIController是你的API控制器,GetMyAPIMethod是你的API方法,MyObjectType是它返回的数据类型。在你的控制器中使用它,这应该工作