2016-05-10 68 views
0

我試圖讓我的apicontroller工作。但不知何故,我不能返回Json()MVC 4返回JSON作爲ActionResult

下面是編譯器錯誤消息:

錯誤CS0029無法隱式轉換類型 'System.Web.Http.Results.JsonResult <>' 到 「System.Web.Mvc。 JsonResult」 Opten.Polyglott.Web d:\開發\ 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 }); 
     } 
    } 
} 

感謝您的幫助。

+0

你的方法是某種類型的返回JSON對象,但你的返回類型jsonresult的。我認爲它期望有一個類型 – Baahubali

+0

@ user1490835我的代碼和這一個之間有什麼區別:http://stackoverflow.com/questions/227624/asp-net-mvc-controller-actions-that-return-json-or -partial-html – NinjaOnSafari

+0

System.Web.Mvc.JsonResult是你想要的。我不知道爲什麼「JSON」映射到System.Web.Http.Results.JsonResult。 您可以明確指出: return System.Web.Mvc.Json(new {isSuccess = isSuccessful}); – CooncilWorker

回答

6

你的問題是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 }); 
     } 
    } 
} 

讓我知道,如果這對你有用。

2

看來你的Json在System.Web.Http中使用類,而不是在System.Web.Mvc中。在這種情況下,您可以使用此代碼:

return new JsonResult{ isSuccess = isSuccessful }; 
0

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

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