我正在构建一个教科书.NET WebAPI Web服务,假设在最简单的情况下接收GET请求并返回JSON对象数组。
但是该项目还加载了NewtonsoftJSON nuget包,显然该包重新定义了ApiController
类,因此它的Json()
方法具有不同的声明。最终结果是我得到以下编译时错误:
如何保护我的控制器声明不被牛顿软件重新定义?
public class ImmediateInformationController : ApiController
{
public JsonResult Get([FromUri] ImmediateInformation ii)
{
// some code here
return this.Json(iil, JsonRequestBehavior.AllowGet);
}
}
有点背景:最初我只返回iil
,但在浏览器中测试时,它提示下载ImmediateInformation.json
文件,其中包含我需要的JSON。以上是尝试将JSON作为纯文本返回,这使我发现当参数类型与MSDN文档不匹配时,Newtonsoft重新定义ApiController
。
重新上限:问题只是使用JSON下载问题来说明我在做什么。当我声明控制器类是ApiController
的后代时,我如何确保它是Microsoft的API控制器,而不是Newtonsoft的?
答案 0 :(得分:5)
Web API 2默认包含JSON.NET,并在其Why are there differing definitions of INT64_MIN? And why do they behave differently?中使用它。您的教程可能不是针对Web API 2,而是针对早期版本,或Json() method。
省略JsonRequestBehavior:
#define MAX_INT 32767
#define MIN_INT (-MAX_INT - 1)
/* Translates to -32767 - 1 ==> -32768 */
或者只是返回正确的返回类型,让Web API处理序列化:
return this.Json(iil);
你也可以使用IHttpActionResult:
public ImmediateInformation Get([FromUri] ImmediateInformation ii)
{
return ii;
}
根据您的编辑和评论,您实际上在寻找MVC instead of Web API。
答案 1 :(得分:0)