如何获取API控制器的URL
本文关键字:API 控制器 URL 获取 何获取 | 更新日期: 2023-09-27 18:29:04
我有一个ASP.NET MVC站点,它有4层:
- UI
- DAL
- BLL
- 服务
在服务层,我拥有所有的WebApi控制器。我已经在UI层中引用了Services层。
这是jQuery ajax调用:
$.ajax(
{
url : "api/albums",
type: "POST",
data: {} ,
sucess:function(data){},
error:function(e){}
})
现在我得到了一个404错误的上面的网址。我同意这是显而易见的。
我的问题是-在这种情况下,服务/API的URL是什么
API控制器:
public class AlbumsController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return albums { };
}
// GET api/values
public void Post(Album album)
{
albums.Add(album);
}
}
WebAPi.config:
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
在看到一些答案之后,我在这里添加输入。
当我说/api/albums
时,它会查找一个名为api的控制器,并尝试查找一个名称为Albums
的操作,因为在UI层中,路由配置为{controller}/{action}/{id}
。我正在尝试调用服务层中存在的API控制器,并且在UI层中引用了该层。
这里你已经硬编码了一个url:
url : "api/MyControllerName",
这很糟糕,永远不应该这样做。你应该使用url助手。
因此,在ASP.NET MVC布局中,您可以使用Url帮助程序来生成正确的Url:
<script>
window.myUrl = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "Albums" })';
</script>
然后在提出AJAX请求时使用这个:
$.ajax({
url : window.myUrl,
...
});
url : "api/MyControllerName/ActionName"
在这个参数中,你还应该传递Action Method Name,目前你得到的是404错误,因为默认情况下,Index方法可能正在调用,而这可能不在你的控制器中,所以尝试传递ActionMethod Name
$.ajax(
{
url : "api/Albums/",
type: "GET",
sucess:function(data){},
error:function(e){}
})
- url=api/控制器名称(不带后缀Controller)
- 类型=GET、POST、PUT或DELETE
- 数据=仅在GET以外的操作中可用