MVC 4将JSON作为ActionResult返回

Nin*_*ari 2 c# json controller asp.net-mvc-4 asp.net-apicontroller

我正试图让我的apicontroller工作.但不知怎的,我不能回来Json().

这是编译器的错误消息:

错误CS0029无法将类型'System.Web.Http.Results.JsonResult <>'隐式转换为'System.Web.Mvc.JsonResult'Opten.Polyglott.Web D:\ Development\git\Opten.Polyglott\src\Opten.Polyglott名.web \控制器\ 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 });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助.

niz*_*zik 10

你的问题是usings内作为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 });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这对您有用,请告诉我.


ngu*_*890 5

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

return new JsonResult{ isSuccess = isSuccessful };
Run Code Online (Sandbox Code Playgroud)