如何获取API控制器的URL

本文关键字:API 控制器 URL 获取 何获取 | 更新日期: 2023-09-27 18:29:04

我有一个ASP.NET MVC站点,它有4层:

  1. UI
  2. DAL
  3. BLL
  4. 服务

在服务层,我拥有所有的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层中引用了该层。

如何获取API控制器的URL

这里你已经硬编码了一个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以外的操作中可用