我似乎无法对我的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");
}
我不知所措。关于该尝试的任何想法?
答案 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的外观。