我的控制器代码:
public List<ContactDTO> GetAllContacts()
{
return repository.GetAllContacts().ToList();
}
public ContactDTO GetContact(int contactId)
{
return repository.GetContact(contactId);
}
我的ajax电话:
$.ajax({
method: "GET",
url: "http://localhost:54185/contacts/details/1",
dataType: "JSON",
success: function (data) {
callback();
},
});
我的ajax调用让所有联系人正常工作:
$.ajax({
method: "GET",
url: "http://localhost:54185/contacts",
dataType: "JSON",
success: function (result) {
// result is ok
}
});
我已编辑了RouteConfig
和WebApiConfig
个文件,因此我不确定我是否做得对。
//RouteConfig:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Details",
url: "contacts/details/{id}",
defaults: new { controller = "Home", action = "Details", id = UrlParameter.Optional }
);
}
和WebApiConfig
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(name: "contactDetails",
routeTemplate: "{controller}/details/{id}");
}
所以我不确定我错过了什么/做错了什么。使用此配置,首先ajax调用始终属于GetAllContacts()
方法
答案 0 :(得分:0)
在这种情况下,如果您同时使用MVC和API,则最好不要混淆您的路由方案。而且我不确定GetAllContacts在这种情况下是如何工作的,要么应用像之前的回答者所说的Route属性,要么重命名你的方法。
我更喜欢将API保存在特定的分类中:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}",
defaults: new {
controller = "DefaultApi",
id = RouteParameter.Optional }
);
所以在你的情况下,保持你的控制器并保持你的行动。也许可以用[HttpGet]
来装饰它以获得良好的衡量标准:
[HttpGet]
public List<ContactDTO> AllContacts()
{
return repository.GetAllContacts().ToList();
}
如果您在.CSHTML文件中渲染脚本,您可以让Web API为您呈现正确的路径:
$.ajax({
method: "GET",
url: "@(Url.RouteUrl("DefaultApi", new { httproute = false, controller = "Contacts", action = "AllContacts" }))",
dataType: "JSON",
success: function (result) {
// result is ok
}
});
答案 1 :(得分:-2)
尝试使用Atribute Routing以更好地理解 你需要提供完整的