在Razor视图中显示来自Web API控制器的json
本文关键字:API Web 控制器 json Razor 视图 显示 | 更新日期: 2023-09-27 18:06:45
我正在做一个asp.net MVC 5应用程序。我创建了一个返回药物列表的Web API 2控制器。现在我想把它们显示给视图。我创建了另一个名为homecontroller的控制器和索引动作方法(因为我认为api控制器不能有动作方法)。我创建了索引视图。在这个视图中,我想展示药物清单。我点击了这个链接http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api
我正在尝试这个代码:
var uri = '/api/Medicines';
$(document).ready(function () {
// Send an AJAX request
$.getJSON(uri)
.done(function (data) {
// On success, 'data' contains a list of products.
$.each(data, function (key, item) {
// Add a list item for the product.
$('<li>', { text: formatItem(item) }).appendTo($('#products'));
});
});
});
但是在浏览器控制台中得到404。
这是Web APi控制器方法:
public class MedicinesController : ApiController
{
public IEnumerable<Medicine> GetMedicines()
{
Random rnd = new Random();
return medicines.OrderBy(x => rnd.Next()).ToList();
}
}
路由配置为:
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
请建议如何解决这个问题。我需要json格式的药品列表。
谢谢
链接'/api/Medicines'如果路由配置类似于
routes.MapHttpRoute(
name: "API Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
但如果你是这样的(教程中有两个版本)
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
你还必须在uri '/api/Medicines/Medicines'中指定Action name。
更新我用WebApi创建了新的MVC 5项目,一切都工作得很好,没有任何问题和hack。
如果你有标准路由配置,不使用任何区域等,你的uri应该是
var uri = '/Medicines/GetMedicines'
正如Joanvo所说,您可能需要allowGet设置作为返回。这样的:
return Json(medicines.OrderBy(x => rnd.Next()), JsonRequestBehavior.AllowGet);