Вопрос

У меня есть нормальный проект ASP.NET MVC (не веб-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»

Если я помню правильно, это будет работать в проекте веб-API.

Что я делаю не так?Что-то мне нужно добавить?

Это было полезно?

Решение

Ларс, второй вопрос=> Вы можете просто вернуть OfficeProductViewModel вместо JsonResult. JSonResult - это действие, не используемое в webapi.

jsonresult находится в пространстве имен System.Web.mvc, где Apicontroller находится в System.Web.http (Веб-API).

Первый вопрос=> Убедитесь, что вы не ссылаетесь на систему .Web.mvc в вашем Apicontroller, просто 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);
.

Скотт Хансельман имеет приятную статью об этом; http://www.hanselman.com/blog/oreaspnetmakingjsonwebapiswithAspnetmvc4betaandaspnetwebapi.aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top