Если вы хотите вернуть ответ JSON из вашего метода действия контроллера MVC, вы можете использовать метод Json
.
Метод Json
определен внутри System.Web.Mvc.Controller
, от которого вы наследуете HomeController
. Таким образом, у вас есть доступ к этому методу.
Метод Json
возвращает JsonResult
typw. Поэтому убедитесь, что тип возвращаемого значения вашего метода - JsonResult
или ActionResult
. (JsonResult
класс наследует от ActionResult
)
public JsonResult Index()
{
var result = _testService.Get();
return Json(result,JsonRequestBehavior.AllowGet);
}
Или
public ActionResult Index()
{
var result = _testService.Get();
return Json(result,JsonRequestBehavior.AllowGet);
}
Другой вариант - использовать контроллер веб-API вместо контроллера MVC. Зарегистрируйте ваши веб-интерфейсы API до того, как ваш метод действия MVC будет использоваться в вашем global.asax.cs
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebAppConfig.Register);
RouteConfig.RegisterRoutes(RouteTable.Routes);
// Your other existing code
}
и создайте контроллер webapi, который наследуется от System.Web.Http.ApiController
. Здесь я удалил часть Inpendency Injection для простоты. Вы можете подключить DI к своим контроллерам веб-API, следуя Руководству по интеграции веб-API AutoFac
public class UsersController : ApiController
{
public IEnumerable<User> Get()
{
var result = new List<User>
{
new User { Id = Guid.NewGuid() , DisplayName = "Shyju"},
new User { Id = Guid.NewGuid(), DisplayName = "Scott"}
};
// Hard coded list of users.
// Once you fix your DI setup, you can use your service to get data.
return result;
}
}
По умолчанию в веб-интерфейсе используется согласование содержимого. Он считывает значение заголовка запроса «Принять» и на основании этого выполняет соответствующий модуль форматирования. Используя текущий шаблон веб-API-маршрутизации , вы можете получить доступ к этой конечной точке с помощью приведенного ниже URL-адреса запроса
http://yourSiteBaseUrl/api/users/get
Если вы не хотите указывать get
в URL-адресах API, просто исправьте шаблон маршрута при регистрации маршрутизации веб-API
routeTemplate: "api/{controller}/{id}"