【问题标题】:Routing not recognizing POST request, defaults to GET路由不识别 POST 请求,默认为 GET
【发布时间】:2017-02-01 10:34:14
【问题描述】:

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

几天来,我一直在为我的公司开发一个 MVC C#.NET (4.0) Web API 项目中的 RESTful API(时断时续),但由于某种原因,我似乎无法获得 API路由到 HTTP POST,但继续默认为 Get(我假设..)。

我有几个 GET 请求运行良好,我什至对它们进行了压力测试,这让我相信存在 路由错误 我似乎找不到的地方......

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

{"Message":"请求的资源不支持http方式 '得到'。”} 本地主机: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 });
        }

        } 

【问题讨论】:

    标签: c# .net rest routing


    【解决方案1】:

    您正在执行 GET 并且您的方法被标记为 [HttpPost] 并且您传递的参数应该与在这种情况下的参数名称相同 s=someValue

    【讨论】:

    • 嗯,显然它被识别为 GET,这就是我寻求帮助的原因......我改变参数也没关系,仍然得到相同的错误消息......跨度>
    • 无法仅使用 URL 发送 HTTP POST 请求。 (除了没有表单字段并且服务器不关心 Content-type 标头的特殊情况。)。您可以使用
      、javascript 或 jQuery 来进行 POST,只需在 Google 上搜索这些选项,或者在 C# stackoverflow.com/questions/4015324/http-request-with-post
      中调用它们
    【解决方案2】:

    您收到的消息意味着您正在访问正确的路径,但您使用的是 GET 请求而不是 POST,这就是它不起作用的原因。

    这应该可以工作:

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

    【讨论】:

    • 那么如何让请求被识别为 POST?
    • 什么意思?我的网址?
    • 你怎么称呼它,通过其他代码,通过浏览器,邮递员?
    • 在 post.localhost:61090/api/Ole_foundations/Post/?s=kalle
    • 好的,你正在发送一个 GET,用一个有效的 curl 请求更新我的回复
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 2016-09-09
    • 2015-02-02
    • 2013-09-17
    • 1970-01-01
    • 2018-05-26
    相关资源
    最近更新 更多