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");
}
我不知所措。关于尝试什么的任何想法?
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] 属性的方法。