webapi 中的错误 - 无法从“System.Web.Mvc.JsonRequestBehavior”转换为“Newtonsoft.Json.JsonSerializerSettings”

Posted

技术标签:

【中文标题】webapi 中的错误 - 无法从“System.Web.Mvc.JsonRequestBehavior”转换为“Newtonsoft.Json.JsonSerializerSettings”【英文标题】:error in webapi - cannot convert from 'System.Web.Mvc.JsonRequestBehavior' to 'Newtonsoft.Json.JsonSerializerSettings' 【发布时间】:2017-10-27 12:35:20 【问题描述】:

在 webapi jsonrequestbehaviour 不起作用,显示无法将 'System.Web.Mvc.JsonRequestBehavior' 转换为 'Newtonsoft.Json.JsonSerializerSettings'

代码

 public ActionResult AddTemprature(string EmployeeName, int EmployeeId, string Location)
        
            try
            

                using (EmployeeDBEntities DB = new EmployeeDBEntities())
                

                    WebApi.Employee emp = new WebApi.Employee();
                    // EmployeeModel Emp = new EmployeeModel();
                    emp.EmpName = EmployeeName;
                    emp.EmpId = EmployeeId;
                    emp.EmpLocation = Location;
                    DB.Employees.Add(emp);
                    DB.SaveChanges();
                    return Json(true, JsonRequestBehavior.AllowGet);
                
            
            catch (Exception Ex)
            

            
            return Json(false, JsonRequestBehavior.AllowGet);
        

【问题讨论】:

请将鼠标悬停在“Json”上并告诉我们它的来源。我怀疑有一些有趣的地方,比如 Json 的重复,当它应该寻找控制器的 Json 方法时 枚举 system.System.Web.Mvc.JsonRequestBehaviour.may 应该是这样的“return Json((object)new success = false );” Using JSON.NET as the default JSON serializer in ASP.NET MVC 3 - is it possible?的可能重复 我刚试了一下,在里面放一个布尔值不会导致编译错误。只要Json 是纯 ASP.NET MVC 版本的 Json。你有没有发现Json 是在哪里定义的?您的Json 方法接受JsonSerializerSettings 而不是正常的JsonRequestBehaviour 一定是有原因的 能不能选择Json去定义,是定义protected internal JsonResult Json(object data, JsonRequestBehavior behavior); 【参考方案1】:

您正在使用控制器 json 响应,而不是 ApiController 响应类型。 使用下面的代码,你应该已经准备好了。

return new JsonResult()
            
                Data = false,
                JsonRequestBehavior = JsonRequestBehavior.AllowGet
            ;

【讨论】:

【参考方案2】:

我遇到了同样的问题。事实证明,我将类定义为“public class PersonalApiController:ApiController”而不是“public class PersonalApiController:Controller”。更改解决了问题。

【讨论】:

【参考方案3】:

将公共类 shahriarController : ApiController 更改为 公共类 shahriarController :控制器。 您必须从 Controller 继承,而不是从 ApiController 继承。 它将解决“JsonRequestBehavior.AllowGet”。

public class shahriarController : Controller

    public ActionResult Get()
    
        List<Student> list = new List<Student>();
        list.Add(new Student()  Name = "sjass", Roll = "5544" );
        list.Add(new Student()  Name = "wwww", Roll = "0777" );
        list.Add(new Student()  Name = "rrttt", Roll = "4355" );

        return Json(list, JsonRequestBehavior.AllowGet);
    

【讨论】:

以上是关于webapi 中的错误 - 无法从“System.Web.Mvc.JsonRequestBehavior”转换为“Newtonsoft.Json.JsonSerializerSettings”的主要内容,如果未能解决你的问题,请参考以下文章

从 C# 调用 WebApi 获取异常 HttpRequestException

.NET 6 WebApi 错误使用 Visual Studio 2022 当前

无法从 WebAPI 获得响应

WebApi 2 超出最大请求长度

通过 AJAX 将 JSON 数据发布到 Web API 失败,并显示“无法将 JSON 值转换为 System.Int32”

AspNet Core WebApi 在启动时失败并出现错误 System.Collections.Generic.KeyNotFoundException