3

我有一个普通的 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 项目中工作。

我究竟做错了什么?我需要补充什么?

4

1 回答 1

6

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

于 2014-02-27T22:30:06.760 回答