从WebApi返回JsonResult不工作ASP.NET

时间:2018-03-19 12:42:32

标签: c# json asp.net-mvc asp.net-web-api jsonresult

我有一个MVC项目。我想得到一个简单的json响应{结果:" ok"}。以下是我的代码

using System;
using System.Web.Mvc;
using Microsoft.Xrm.Sdk;
using CRM_WebApp.Models;
using System.Web.Http;
using System.Web.Http.Cors;
using Microsoft.Xrm.Sdk.Query;
using CRM_WebApp.Services;

namespace CRM_WebApp.Controllers
{
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class CallBackFormController : ApiController
    {

        [System.Web.Mvc.HttpPost]
        public JsonResult Post([FromBody] CallBackFormModel CallBackFormModel)
        {
            ConnectiontoCrm connectiontoCrm = new ConnectiontoCrm();
            //connectiontoCrm.GetConnectiontoCrm();
            connectiontoCrm.GetConnectiontoCrmCopy();

            Entity lead = new Entity("lead");
            lead["firstname"] = CallBackFormModel.FirstName;
            lead["mobilephone"] = CallBackFormModel.Telephone;
            lead["telephone3"] = CallBackFormModel.Telephone;

            Guid tisa_callbackformid = connectiontoCrm.organizationservice.Create(callbackform);
            return new JsonResult { Data = new { result = "ok" } };
        }
    }
}

我的代码给了我以下回复:

{
    "ContentEncoding": null,
    "ContentType": null,
    "Data": {
        "result": "ok"
    },
    "JsonRequestBehavior": 1,
    "MaxJsonLength": null,
    "RecursionLimit": null
}

如何更改我的代码以获得回复:{result:" ok"}

3 个答案:

答案 0 :(得分:3)

在您的代码中进行一些调查之后,我确实注意到存在一些基本错误。

  1. 当你从ApiController继承时,所以你在这里创建WebApiController,而不是MVC控制器(可以通过继承Controller类创建)

  2. 您必须小心使用的命名空间,因为有些类和属性具有相同的名称但位于不同的命名空间中,例如,HttpPost属性存在于{{1}中和System.Web.Http并且根据您的代码,您必须使用前一个命名空间中的那个,因为您继承自System.Web.Mvc

  3. 请记住,ApiController适用于ASP.NET MVC,System.Web.Mvc适用于Web API。

    1. 您没有为方法使用正确的返回类型(代表Web API方法)
    2. 因此,在解决了之前的所有问题之后,工作代码应该是这样的

      System.Web.Http

      我建议您阅读有关ASP.NET MVC和Web API以及它们之间的区别,以避免将来出现这类问题。

答案 1 :(得分:1)

试试这个:

return Json(new { result = "ok" }, JsonRequestBehavior.AllowGet);

答案 2 :(得分:0)

要回答您的问题,我遇到了同样的问题,因为当我返回响应时,我喜欢返回多个对象/类型。

例如,我总是返回包含一些成功和错误消息的消息结果。这个对象在我所有的api响应中都已被重用。然后,我想返回第二个对象,其中包含任何数据,例如客户列表或其他任何数据。

这就是我如何使其适用于WebAPI ...

public IHttpActionResult DeleteEmailTemplate(int id)
    {
        FormResponse formResponse = new FormResponse("SUCESS MESSAGE HERE");

        List<string> strings = new List<string>();
        strings.Add("this is a test");
        strings.Add("this is another test");

        return Json(new { MessageResult = formResponse, TestObject = strings });
    }