Web API:找不到方法,不允许方法

时间:2014-12-29 18:44:34

标签: javascript c# ajax asp.net-web-api

我似乎无法对我的Web API控制器进行ajax调用。 URL不对(找不到方法)或者我得到方法不允许错误。这是我的ajax电话:

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

从此网址调用ajax调用:

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

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

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 removal entries in my 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");
    }

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

2 个答案:

答案 0 :(得分:0)

您的ajax调用的网址应为“HTTP:// {{domainname}} .com / api / {{controller}}”

例如,“http://myapiproject.com/api/server”...除非您将控制器放在与“控制器”不同的目录中。

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

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

答案 1 :(得分:0)

您的网址中的#用于客户端逻辑,很可能是路由,并且在您的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的外观。