MVC 4 以 ActionResult 形式返回 JSON

34 浏览
0 Comments

MVC 4 以 ActionResult 形式返回 JSON

我试图让我的ApiController正常工作。但是某种方式我不能返回Json()

下面是编译器的错误信息:

Error CS0029 无法隐式地将类型\'System.Web.Http.Results.JsonResult<>\'转换为\'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 });
        }
    }
}

感谢任何帮助。

admin 更改状态以发布 2023年5月23日
0
0 Comments

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

return new JsonResult{ isSuccess = isSuccessful };

0
0 Comments

你的问题出在使用了错误的命名空间,因为UmbracoApiController很可能继承自ApiController (来自System.Web.Http)而不是Controller (来自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 });
        }
    }
}

如果这样行得通,请告诉我。

0