2016-09-23 1 views
0

Я все еще нужна помощь относительно ниже выпуска:маршрутизации не распознает запрос POST, по умолчанию GET

Я работаю над RESTful API в MVC C# .NET API проекта (4.0) Web для моего компании в течение нескольких дней (вкл. и выкл.), но по какой-то причине я не могу заставить API перейти на HTTP POST, но продолжает отказываться от Get (я предполагаю ..).

У меня есть несколько GET запросов работают нормально, я даже стресс-тестирование их, это заставляет меня верить, есть ошибки маршрутизации где-то, что я не могу найти. ..

Я получаю это сообщение об ошибке при навигации (я также пробовал много других параметров, но отладчик не поймает запуск метода Post).

{ "Сообщение": "Запрашиваемый ресурс не поддерживает метод HTTP 'GET'."} локальный: 61090/API/Ole_foundations/Post/с = 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 }); 
     } 

     } 

ответ

0

сообщение, которое вы получаете означает, что вы будете работать правильный путь, но что вы используете запрос GET вместо POST, который почему он не работает.

Это должно работать, хотя:

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

Так как заставить запрос распознаваться как POST? – geostocker

+0

Можете ли вы показать, как вы отправляете свой запрос? – IamNguele

+0

Что значит? Мой URL? – geostocker

1

Вы делаете GET и ваш метод помечен как [HttpPost] alsto аргумент, что вы передаете должно быть то же самое имя в качестве параметра в этом случае s=someValue

+0

Ну, очевидно, это признано GET, вот почему я прошу о помощи ... Не имеет значения, изменю ли параметр , все равно получите то же сообщение об ошибке ... – geostocker

+0

Запрос HTTP POST не может быть отправлен с использованием только URL-адреса. (За исключением специального случая, когда нет полей формы и что сервер не заботится о заголовке Content-type.). Вы можете использовать

, javascript или jQuery, чтобы сделать POST, просто указать эти параметры Google или вызвать их внутри C# http://stackoverflow.com/questions/4015324/http-request-with- после – Jersono