c# - 使用 Asp.net Web Api 时面临的问题,详细信息如下:
问题描述
我创建了带有两个控制器的 Web Api 应用程序,第一个是HomeController
我在其中创建了名为的操作ApiDataView
并创建了该操作的视图并调用了另一个名为的操作,GetNames
在该操作中我在另一个名为的控制器中创建了该操作,我在View中APITESTController
调用它但是单击按钮时,我无法获取此操作的值。GetNames
List<string>
ApiDataView
GetNames
我的代码:
Home
控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace My_Work.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpGet]
public ActionResult ApiDataView()
{
return View();
}
}
}
APITest
控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace My_Work.Controllers
{
public class APITestController : ApiController
{
public List<string> GetNames()
{
List<string> names = new List<string>() { "Zeeshan", "Uzair", "Nouman" };
return names;
}
}
}
ApiDataView
看法:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>APIDataView</title>
<script> src="~/Scripts/jquery-1.7.1.js" </script>
</head>
<body>
<div>
<input type="button" id="btn1" value="Show Name" />
<ul id="nl">
<li>ABC</li>
</ul>
</div>
</body>
</html>
<script>
$("#btn1").click(function () {
$("#nl").empty();
$.getJSON("api/APITest/GetNames", function (data) {
$.each(data, function (id,val) {
$("#nl").append("<li>" + val + "</li>");
});
});
});
</script>
WebApiConfig
App_Start 文件夹:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace My_Work
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var xmlType =
config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(xmlType);
}
}
}
RouteConfig
App_Start 文件夹:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace My_Work
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "ApiDataView", id = UrlParameter.Optional }
);
}
}
}
这是我获取GetNames
操作值的代码:
<script>
$("#btn1").click(function () {
$("#nl").empty();
$.getJSON("api/APITest/GetNames", function (data) {
$.each(data, function (id,val) {
$("#nl").append("<li>" + val + "</li>");
});
});
});
</script>
输出:
现在点击按钮我无法获得GetNames
行动的价值。任何帮助表示赞赏。
解决方案
您给出的路径是相对的,这意味着它将在当前 URL 之后附加您的路径“api/APITest/GetNames”,因此创建的请求路径是“/Home/api/APITest/GetNames”,它不存在,这就是你得到的原因404 错误(检查浏览器的控制台)。要解决此问题,请提供类似"/api/APITest/GetNames"的路径以使其绝对意味着从"/api"开始。
$.getJSON("/api/APITest/GetNames", function (data) {});
推荐阅读
- javascript - 没有出现更改电子邮件/个人资料图片的表格?
- php - DateTimeImmutable 方法类型在运行时不可见
- java - 使用 java 和 Selenium 将驱动程序从 chrome 切换到 electron
- sql - SQL Server:在where条件下将表达式转换为数据类型int的算术溢出错误
- javascript - 如何在另一个类的函数的函数中访问一个类的函数
- javascript - 无法使用自定义验证器测试 React propType
- sql-server - 使用 YYYYMM 上个月的 SQL Server 日期计算
- powershell - 如何比较两个不同 CSV 文件的列?
- python - 如何使用 selenium 和 scrapy 抓取一个网站,当您单击“下一页”按钮时不会更改其 url
- python - python请求:(SSLError(1,'[SSL:WRONG_VERSION_NUMBER]错误的版本号(_ssl.c:1123)'))