我有一个ASP.NET MVC站点,它有4层:
在服务层,我有所有的WebApi控制器。我在UI层中引用了Services层。
这是jQuery ajax调用:
$.ajax(
{
url : "api/albums",
type: "POST",
data: {} ,
sucess:function(data){},
error:function(e){}
})
现在我收到上述网址的404错误。我同意这很明显。
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层中引用该层。
答案 0 :(得分:1)
这里你已经硬编码了一个网址:
url : "api/MyControllerName",
这很糟糕,永远不应该这样做。你应该使用网址助手。
因此,在ASP.NET MVC布局中,您可以使用Url帮助程序生成正确的URL:
<script>
window.myUrl = '@Url.RouteUrl("DefaultApi", new { httproute = "", controller = "Albums" })';
</script>
然后在发出AJAX请求时使用它:
$.ajax({
url : window.myUrl,
...
});
答案 1 :(得分:0)
$.ajax(
{
url : "api/Albums/",
type: "GET",
sucess:function(data){},
error:function(e){}
})
答案 2 :(得分:0)
url : "api/MyControllerName/ActionName"
在此参数中,您还应传递操作方法名称,目前您收到404错误,因为可能默认情况下,索引方法正在调用,而控制器中可能不存在此类错误,因此请尝试传递ActionMethod名称