C# 在Razor视图上显示来自Web API控制器的json

C# 在Razor视图上显示来自Web API控制器的json,c#,asp.net,asp.net-mvc,json,razor,C#,Asp.net,Asp.net Mvc,Json,Razor,我正在开发一个asp.NETMVC5应用程序。我创建了一个Web API 2控制器,它返回药物列表。现在我想显示它们以供查看。我创建了另一个名为homecontroller和index action method的控制器(因为我认为api控制器不能有action method)。我创建了索引视图。从这个角度来看,我想展示一下药品清单。我跟踪了这个链接 我正在尝试以下代码: var uri = '/api/Medicines'; $(document).ready(function () {

我正在开发一个asp.NETMVC5应用程序。我创建了一个Web API 2控制器,它返回药物列表。现在我想显示它们以供查看。我创建了另一个名为homecontroller和index action method的控制器(因为我认为api控制器不能有action method)。我创建了索引视图。从这个角度来看,我想展示一下药品清单。我跟踪了这个链接

我正在尝试以下代码:

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'));
            });
        });
});
请建议如何修复此问题。我需要json格式的药物列表

谢谢

如果路由的配置类似于

但如果您有这样的版本(教程中有两个版本)

您还必须在uri“/api/Medicines/Medicines”中指定操作名称。

更新
我用WebApi创建了一个新的MVC5项目,所有的工作都没有任何问题和漏洞。您无法尝试与您的解决方案进行比较-。

如果您具有标准路由配置,并且不使用任何区域等,则您的uri应该是

var uri = '/Medicines/GetMedicines'
正如乔纳沃所说,作为回报,你可能需要设置allowGet。像这样:

return Json(medicines.OrderBy(x => rnd.Next()), JsonRequestBehavior.AllowGet);

您可以显示您的路由配置吗?请检查更新的问题您在Medicines controller中是否有名称以“Get”开头的其他操作?检查我的答案的更新。请记住,我在home/index视图中使用此url,并且我的api控制器是MedicineController。在您的路由配置中,您没有提及任何操作。默认情况下没有任何操作。您能否将其更改为类似“url:{controller}/{action}/{id}”,默认值为:new{controller=“Home”、action=“Index”、id=UrlParameter.Optional}”?然后再试一次?@Antonio97 WebApi!=NETMVC。您建议更改MVC路由,但DotnetSparrow在WebApi路由方面存在问题。
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 }
);
var uri = '/Medicines/GetMedicines'
return Json(medicines.OrderBy(x => rnd.Next()), JsonRequestBehavior.AllowGet);