路由不识别POST请求,默认为GET
本文关键字:默认 GET 请求 识别 POST 路由 | 更新日期: 2023-09-27 18:08:34
我仍在寻求以下问题的帮助:
我一直在MVC c#中开发RESTful API。. NET (4.0) Web API项目在我的公司已经有几天了(断断续续),但由于某种原因,我似乎无法让API路由到HTTP POST,但一直默认为get(我假设…)。
我有一些GET请求工作正常,我甚至对它们进行了压力测试,这使我相信有一个路由错误在某个地方,我似乎找不到…
当导航到时,我得到这个错误消息(我也尝试了许多其他参数,但调试器不会捕获Post方法触发)。
{"Message":"请求的资源不支持http方法。"得到"。"}localhost: 61090/api/Ole_foundations/Post/?s = kalle
这是我的帖子:
[HttpPost]
public void Post(string s)
{
WSC.DNN.WorksiteCloudOLEDC.WorkSiteCloudOLEDC.WorkSiteCloudOLEDC wdc = new WSC.DNN.WorksiteCloudOLEDC.WorkSiteCloudOLEDC.WorkSiteCloudOLEDC();
int ret1 = 0;
int ret2 = 0;
Boolean ret3 = wdc.INSERTOLE_Foundation(14774, 14774, "JSONTEST", "JSONTEST", "JSONTEST", 0.00, 0.00, 0.00, 0.000, 0.00, 0.000, "JSONTEST", 0.000, 0.000, 12345, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, "JSONTEST", 1234, 0.000, 0.000, 0.000, 0.000, true, true, Convert.ToDateTime("01/01/1900"), "JSONTEST", "JSONTEST", true, "JSONCOMMENTTEST", 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, true, true, true, true, true, true, true, 12345, true, true, 12345, true, true, "JSONTEST", "JSONTEST", "JSONTEST", null, Convert.ToDateTime("01/01/1900"), "JSONTEST", null, Convert.ToDateTime("01/01/1900"), Convert.ToDateTime("01/01/1900"), Convert.ToDateTime("01/01/1900"), null, null, null, true, true, true, "JSONTEST", 0.000, 0.000, 0.000, 0.000, 0.000, 0.000, null, "FINALJSONTEST", true, "NRCJSONTEST", 12345, true, true, true, true, true, true, "UPDATEDBYTEST", 3322, WSC.DNN.GeneralRoutines.clsEnums.MappingTypes.OLE_Foundation, conStr, "JoakimJSONTEST", ref ret1, ref ret2);
}
方法体中的所有内容都很好,并按预期工作。
这些路由定义在WebApiConfig.cs:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{parameters}",
defaults: new { parameters = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ApiByAction",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { controller = "Ole_foundations", action = "GetFromThreads", id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "insertRoute",
routeTemplate: "api/{controller}/{action}/{param}",
defaults: new { controller = "Ole_foundations", action = "Post", param = RouteParameter.Optional }
);
And these are the routes defined in **Global.asax.cs:**
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
RouteTable.Routes.MapHttpRoute(null, "api/{controller}/{action}/{parameters}",
new { parameters = UrlParameter.Optional, Action = "Get" });
RouteTable.Routes.MapHttpRoute(null, "api/{controller}/{action}/{param}",
new { Action = "Post", param = UrlParameter.Optional });
}
}
您正在进行GET并且您的方法被标记为[HttpPost]
并且您传递的参数应该与本例中s=someValue
的参数名称相同
你得到的消息意味着你正在访问正确的路径,但你正在使用get请求而不是POST,这就是为什么它不起作用。
这应该可以工作:
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 's=kalle' "http://localhost:61090/api/Ole_foundations/Post/"