Web API:找不到方法和不允许的方法

本文关键字:方法 不允许 找不到 API Web | 更新日期: 2023-09-27 18:35:45

我似乎无法对我的Web API控制器进行ajax调用。要么 URL 不正确(找不到方法),要么我收到方法不允许错误。这是我的 ajax 调用:

    $.ajax({
        url: 'server/InstallApp',
        type: 'POST',
        data: {server: serverAsJson, appWithGroup: appWithGroupAsJson},
        contentType: "application/json",
        success: InstallRequested
    });

正在从以下 URL 调用该 ajax 调用:

http://serverName/PrestoWebApi/app/#/server/ApplicationServers%5E%5E8

这些是我尝试在上述 ajax 调用中使用的各种 URL,结果如下:

url: 'server/InstallApp'
POST http://serverName/PrestoWebApi/app/server/InstallApp 404 (Not Found)

请注意,缺少 #。不确定这是否重要。

url: '#/server/InstallApp'
POST http://serverName/PrestoWebApi/app/ 405 (Method Not Allowed)

不知道为什么 URL 像这样被截断。为什么当 URL 甚至与控制器不匹配时不允许使用方法?

url: '/PrestoWebApi/app/#/server/InstallApp'
POST http://serverName/PrestoWebApi/app/ 405 (Method Not Allowed)

我不确定该尝试什么。我已经使用其他应用程序完成了此操作。我甚至尝试将webdav删除条目放在我的web.config中。

这是我的控制器(请注意,我可以在控制器中调用 Get 方法):

[EnableCors(origins: "http://serverName", headers: "*", methods: "*")]
public class ServerController : ApiController
{
    public ApplicationServer Get(string id)
    {
        // Get code here
    }
    [HttpPost]
    public void InstallApp(ApplicationServer server, ApplicationWithOverrideVariableGroup appWithGroup)
    {
        Debug.WriteLine("snuh");
    }

我不知所措。关于尝试什么的任何想法?

Web API:找不到方法和不允许的方法

URL 中的#用于客户端逻辑(很可能是路由),在 WebAPI 路由中完全忽略。

即此网址:

http://serverName/PrestoWebApi/app/#/server/ApplicationServers%5E%5E8

在服务器上解释为:

http://serverName/PrestoWebApi/app/

我看到的第二个问题是,除非您在WebApiConfig中专门更改了这一点,否则您的 WebAPI 方法不会驻留在/app,而是驻留在/api(或者在您的情况下可能/server)。 您可以将ajax呼叫更改为:

$.ajax({
    url: '/PrestoWebApi/server/InstallApp', // or /PrestoWebApi/api/server/InstallApp
    type: 'POST',
    data: {server: serverAsJson, appWithGroup: appWithGroupAsJson},
    contentType: "application/json",
    success: InstallRequested
});

您可以通过转到 WebAPI 欢迎页面(可能是 http://serverName/PrestoWebApi/api )并通过单击导航栏中的Api来查看帮助页面,从而确切地看到 URL 的外观。

ajax 调用的 URL 应该是 "HTTP://{{domainname}}.com/api/{{controller}}"

例如,"http://myapiproject.com/api/server"...除非您的控制器位于与"控制器"不同的目录中。

然后,由于您已在控制器的"InstallApp"方法上设置了 HttpPost 属性,因此只需确保 ajax 调用中的"类型"设置设置为"POST",并且它应该路由。

这样做,您将无法添加两个添加了 [HttpPost] 属性的方法。