在mvc项目中的Apicontroller - 无法识别httppost和json方法

时间:2014-02-27 21:47:23

标签: asp.net-mvc asp.net-mvc-4 asp.net-apicontroller

我有一个普通的ASP.NET MVC项目(不是Web API)。在这里,我在我的控制器中创建了一个名为“api”的新文件夹,因为我想创建一个简单的api。

然后我创建了以下类:

public class OfficeProductController : ApiController
{
    [HttpPost]
    public JsonResult Create(OfficeProductViewModel model)
    {
        var obj = new OfficeProductViewModel();
        return Json(obj);
    }
}

这里我遇到两个问题:

  • HttpPost:导致“不明确的引用”(在Http.HttpPostAttribute和Mvc.HttpPostAttribute之间)
  • Json()无法识别。它只是给了我一个“无法解决符号Json”

如果我没记错的话,这可以在web api项目中使用。

我做错了什么?我需要添加什么?

1 个答案:

答案 0 :(得分:5)

Lars,第二个问题=>你可以只返回OfficeProductViewModel而不是JsonResult。 JsonResult是一个ActionResult,未在WebApi中使用。

JsonResult位于System.Web.MVC命名空间中,其中ApiController位于System.Web.Http(Web Api内容)中。

第一个问题=>确保您没有在APIController中引用System.Web.MVC,只需要引用System.Web.Http。两个命名空间中都有一个HttpPost对象,您不想使用MVC版本。

要将Json设置为ApiControllers上的默认返回类型而不是xml,您可以在WebApiConfig类中覆盖它,如此;

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);

Scott Hanselman也有一篇很好的文章; http://www.hanselman.com/blog/OneASPNETMakingJSONWebAPIsWithASPNETMVC4BetaAndASPNETWebAPI.aspx

相关问题