0

请多多包涵,因为我对使用 ASP.Net Web API 还是很陌生。

我目前有一个我开发的 API,它似乎工作正常。我可以从我的主页使用 AJAX 调用它,并且一切都按预期工作。例如,我可以拨打如下电话:

$.ajax({
    url: "api/comment/AddComment",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    //and so on...
});

当从我的索引页面调用它时,这工作得很好,当 URL 看起来像 localhost:44966/

我现在需要开始向其他一些视图添加一些功能 - 特别是让用户向网站添加反馈的视图。我在 HomeController 上添加了一个新视图,该视图显示了新的反馈视图,以及一个新的 ApiController(称为 FeedbackController)。在该页面上,我尝试拨打以下电话:

$.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 响应 - 它似乎正在插入“/Home/ " 在它试图用来访问 API 的所有 URL 之前。

有人可以阐明这里发生了什么吗?为什么在 API 调用名称之前插入“/Home/”?

在有人问之前,这是我的 WebApiConfig 路由的样子:

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

1 回答 1

1

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

尝试这个:

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

或者

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

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

于 2013-07-02T22:40:10.573 回答