MVC 4 return JSON 作为 ActionResult
MVC 4 return JSON as ActionResult
我正在尝试让我的 apicontroller 工作。但不知何故我不能 return Json()
。
这是编译器的错误信息:
Error CS0029 Cannot implicitly convert type
'System.Web.Http.Results.JsonResult<>'
to
'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 });
}
}
}
感谢您的帮助。
您的 Json 似乎在 System.Web.Http 中使用 class,而不是在 System.Web.Mvc 中。在这种情况下,您可以使用此代码:
return new JsonResult{ isSuccess = isSuccessful };
您的问题出在使用中,因为 UmbracoApiController
很可能继承自 ApiController (from System.Web.Http)
而不是 Controller (from System.Web.Mvc)
,因此它们具有不同的依赖关系。要解决您的问题,请先删除
using System.Web.Mvc;
并把
using System.Web.Http;
至于 return 在这种情况下会是 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 });
}
}
}
让我知道这是否适合你。
在您的 WebApiConfig.cs 文件中添加以下行:
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
使用 ActionResult 时使用 Response.StatusCode
是一个好习惯:
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" });
}
}
我正在尝试让我的 apicontroller 工作。但不知何故我不能 return Json()
。
这是编译器的错误信息:
Error CS0029 Cannot implicitly convert type 'System.Web.Http.Results.JsonResult<>' to '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 });
}
}
}
感谢您的帮助。
您的 Json 似乎在 System.Web.Http 中使用 class,而不是在 System.Web.Mvc 中。在这种情况下,您可以使用此代码:
return new JsonResult{ isSuccess = isSuccessful };
您的问题出在使用中,因为 UmbracoApiController
很可能继承自 ApiController (from System.Web.Http)
而不是 Controller (from System.Web.Mvc)
,因此它们具有不同的依赖关系。要解决您的问题,请先删除
using System.Web.Mvc;
并把
using System.Web.Http;
至于 return 在这种情况下会是 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 });
}
}
}
让我知道这是否适合你。
在您的 WebApiConfig.cs 文件中添加以下行:
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
使用 ActionResult 时使用 Response.StatusCode
是一个好习惯:
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" });
}
}