我试图让我的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 });
}
}
}
感谢您的帮助。
答案 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"));