MVC 4将JSON作为ActionResult返回

时间:2016-05-10 08:43:42

标签: c# json asp.net-mvc-4 controller asp.net-apicontroller

我试图让我的apicontroller工作。但不知何故,我无法返回Json()

以下是编译器的错误消息:

  

错误CS0029无法隐式转换类型   '&System.Web.Http.Results.JsonResult LT;>'   至   ' System.Web.Mvc.JsonResult' Opten.Polyglott.Web D:\ Development \ git \ Opten.Polyglott \ src \ Opten.Polyglott.Web \ Controllers \ NewsletterApiController.cs

我无法解释为什么它无法将Json()转换为ActionResult甚至Json()继承ActionResult

这是我的控制器:

using MailChimp;
using MailChimp.Helper;
using Opten.Polyglott.Web.Models;
using Opten.Umbraco.Common.Extensions;
using System.Configuration;
using System.Web.Mvc;
using Umbraco.Core.Logging;
using Umbraco.Web.WebApi;

namespace Opten.Polyglott.Web.Controllers
{
    public class NewsletterApiController : UmbracoApiController
    {
        public ActionResult Subscribe(Newsletter newsletter)
        {
            bool isSuccessful = false;
            if (ModelState.IsValid)
            {
                isSuccessful = SubscribeEmail(newsletter.Email);
            }

            return Json(new { isSuccess = isSuccessful });
        }
    }
}

感谢您的帮助。

4 个答案:

答案 0 :(得分:10)

您的问题属于使用范围,因为UmbracoApiController最有可能继承自ApiController (from System.Web.Http)而不是Controller (from System.Web.Mvc),因此它们具有不同的依赖关系。要解决您的问题,请先删除

using System.Web.Mvc;

然后把

using System.Web.Http;

至于这种情况下的返回IHttpActionResult所以你会得到如下内容:

using MailChimp;
using MailChimp.Helper;
using Opten.Polyglott.Web.Models;
using Opten.Umbraco.Common.Extensions;
using System.Configuration;
using System.Web.Http;
using Umbraco.Core.Logging;
using Umbraco.Web.WebApi;

namespace Opten.Polyglott.Web.Controllers
{
    public class NewsletterApiController : UmbracoApiController
    {
        public IHttpActionResult Subscribe(Newsletter newsletter)
        {
            bool isSuccessful = false;
            if (ModelState.IsValid)
            {
                isSuccessful = SubscribeEmail(newsletter.Email);
            }

            return Json(new { isSuccess = isSuccessful });
        }
    }
}

请告诉我这是否适合您。

答案 1 :(得分:4)

看来你的Json正在使用System.Web.Http中的类,而不是在System.Web.Mvc中。在这种情况下,您可以使用以下代码:

return new JsonResult{ isSuccess = isSuccessful };

答案 2 :(得分:1)

在使用Response.StatusCode的ActionResult时,是一个好习惯:

public ActionResult SomeMethod()
{
    try
    {
        // ...
        // doing something here...
        // ...

        // success:
        Response.StatusCode = (int)HttpStatusCode.OK;
        return Json(new { responseText = "OK" });
    }
    catch
    {
        // error:
        Response.StatusCode = (int)HttpStatusCode.BadRequest;
        return Json(new { responseText = "ERROR" });
    }
}

答案 3 :(得分:0)

在WebApiConfig.cs文件中添加以下行:

config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));