路由不识别POST请求,默认为GET

时间:2016-09-23 14:11:05

标签: c# .net rest routing

我仍在寻找有关以下问题的帮助:

我已经在几天之内(开启和关闭)为我的公司在MVC C#.NET(4.0)Web API项目中开发RESTful API但由于某种原因我似乎无法获得API路由到HTTP POST,但继续默认为Get(我假设..)。

我有一些 GET 请求正常工作,我甚至对它们进行了压力测试,这让我相信存在 路由错误 我似乎找不到的地方......

导航到时我收到此错误消息(我也尝试了很多其他参数,但调试器不会捕获Post方法触发)。

  

{“Message”:“请求的资源不支持http方法   '得到'。”}   本地主机:61090 / API / Ole_foundations /后/ S =卡勒

这是我的帖子:

[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 });
        }

        } 

2 个答案:

答案 0 :(得分:1)

您正在进行GET,并且您的方法被标记为[HttpPost],而您传递的参数应与此案例中的参数同名s=someValue

答案 1 :(得分:0)

您获得的消息意味着您正在访问正确的路径,但您使用的是GET请求而不是POST,这就是它无效的原因。

这应该可行:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 's=kalle' "http://localhost:61090/api/Ole_foundations/Post/"