Web Api控制器无法识别Json方法

时间:2015-06-09 08:01:33

标签: c# .net json asp.net-mvc asp.net-web-api

我有一个web api控制器

using sport.BLL.Abstract;
using sport.BLL.Concrete;
using sport.DAL.Entities;
using sport.webApi.Models;
using AutoMapper;
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;  
using Microsoft.Owin.Security;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web;
using System.Web.WebPages.Html;

namespace sport.webApi.Controllers 
{
    public class AccountManageController : ApiController
    {
        [HttpPost]
        public System.Web.Mvc.ActionResult CreateAccount(CollaborateurModel item)
        {
            var user = new ApplicationUser { UserName = item.Username, Email = item.Email };
            var result = UserManager.CreateAsync(user, item.Password);
            if (result.Result.Succeeded)
            {

                var currentUser = UserManager.FindByName(item.Username);
                var roleresult = UserManager.AddToRole(currentUser.Id, item.Role);
                ajt_collaborator entity = Mapper.Map<CollaborateurModel, ajt_collaborator>(item);
                entity.id_user_fk = currentUser.Id;
                entity.is_deleted = false; 
                repo.CreateCollaborator(entity); 
                var response = new { Success = true }; 
                return  Json(response);


            }
            else
            {
                var errorResponse = new { Success = false, ErrorMessage = "error" };
                return  Json(errorResponse);
            }

        }
    }
}

我在这行中遇到错误:

返回Json(响应);

Json方法无法识别!!!当我用Google搜索时,我得到link,表示Json方法中包含System.Web.Mvc方法。即使我尝试导入此命名空间,我也会遇到同样的错误?

  1. 这个错误的原因是什么?
  2. 我该如何解决?

2 个答案:

答案 0 :(得分:6)

  

我该如何解决?

原因在于您不是从Controller继承而是从ApiController继承,前者在ApiController作为其基础中的方法但是,这并不重要,因为你的方法存在根本问题。

与WebAPI一起使用的

ActionResult并不意味着返回public object CreateAccount(CollaborateurModel item) { // Do stuff: if (result.Result.Succeeded) { return new { Success = true } } else { return new { Success = false, ErrorMessage = "error" }; } } ,这是一个属于MVC的概念。相反,您只需返回POCO并让WebAPI框架为您处理序列化:

Global.asax.cs

您可以在JsonMediaTypeFormatter文件中设置Json(object o),并准确说明要使用哪些文件(在您的情况下,您需要group structure Deps is $/basis.cm $/pgraph.cm $smlnj/cm.cm deps.sml )。

答案 1 :(得分:6)

问题是您继承自ApiController,但JsonSystem.Web.Mvc.Controller的成员。

尝试使用JsonResult

return new JsonResult { data = yourData; }

您可以将任何对象设置为数据,因为它将被序列化为JSON。

例如,如果您只需要返回操作结果,可以这样使用它:

return new JsonResult { data = true; } // or false

但是,描述结果类和返回对象是一种好习惯。