Asp.net web api ASP.Net Web API调用导致HTTP 404-“/主页/";正在API调用中插入?

Asp.net web api ASP.Net Web API调用导致HTTP 404-“/主页/";正在API调用中插入?,asp.net-web-api,Asp.net Web Api,请容忍我,因为我对使用ASP.NETWebAPI还相当陌生 我目前有一个我已经开发的API,它似乎工作得很好。我可以在我的主页上使用AJAX调用它,一切正常。例如,我可以打这样的电话: $.ajax({ url: "api/comment/AddComment", type: "POST", contentType: "application/json; charset=utf-8", //and so on... }); $.ajax({ url: "

请容忍我,因为我对使用ASP.NETWebAPI还相当陌生

我目前有一个我已经开发的API,它似乎工作得很好。我可以在我的主页上使用AJAX调用它,一切正常。例如,我可以打这样的电话:

$.ajax({
    url: "api/comment/AddComment",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    //and so on...
});
$.ajax({
    url: "api/Feedback/SubmitFeedback",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    cache: false,
    data: JSON.stringify(parameter),
    success: function (data) {
        alert("success!");
    }
});
当从我的索引页面调用它时,当URL看起来像localhost:44966时,它就可以正常工作了/

我现在需要开始向其他一些视图添加一些功能,特别是为用户添加对站点的反馈的视图。我在HomeController上添加了一个显示新反馈视图的新视图,以及一个新的ApiController(称为FeedbackController)。在那一页上,我试着打一个电话,比如:

$.ajax({
    url: "api/comment/AddComment",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    //and so on...
});
$.ajax({
    url: "api/Feedback/SubmitFeedback",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    cache: false,
    data: JSON.stringify(parameter),
    success: function (data) {
        alert("success!");
    }
});
这将导致404,并且查看调用中的URL,难怪它会失败,因为它看起来是这样的:

    /Home/api/Feedback/SubmitFeedback
我还注意到,如果我导航回主页(这次是到localhost:44966/home/Index),我的其他服务调用也会失败,并出现类似的404响应,因为同样的问题——它似乎在试图访问API的所有URL之前插入了“/home/”

有人能解释一下这里发生了什么吗?为什么在API调用的名称之前插入“/Home/

在任何人询问之前,我的WebApiConfig路由如下所示:

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

您的ajax请求采用相对路径进行调用。您必须提供api的完整路径

试试这个:

$.ajax({
    url: "/full/path/to/api/comment/AddComment",


如果您的api托管在服务器的根目录上。

是否有某种方法可以指定“嘿,这是相对于根目录的”,而不必手动指定整个路径,例如使用波浪线(例如:“~/api/Comment/AddComment”)?添加开始斜杠似乎可以从根目录开始工作。e、 g.:“/api/Feedback/SubmitComment”似乎有效,至少在反馈页面上是这样。当我导航回localhost:44966/Home/Index时,其他api调用似乎仍然阻塞。这是因为默认路由的设置方式吗?