2015-04-03 3 views
0

У меня нет проблем с запросами GET, когда я пытаюсь использовать метод WebAPI для выполнения сервисов в DNN. Тем не менее, я не могу на всю жизнь получить запрос POST, чтобы вернуть что-либо, кроме ошибки HTTP 404 Not Found. Оба метода GET и POST находятся в одном контроллере.DNN WebAPI POST всегда возвращает ошибку 404 Not Found

Я просмотрел подобные вопросы и подтвердил, что имена моей папки являются стандартными, IIS не работает с папками приложений, и у меня нет дополнительного web.config.

Я также установил dnnGlimpse и подтвердил, что мой маршрут зарегистрирован.

Это DNN 7.3.4 и чистый проект - это не шаблон VS.

Это пример моего маршрутного картографа.

public class RouteMapper : IServiceRouteMapper 
{ 
    public void RegisterRoutes(IMapRoute mapRouteManager) 
    { 
     mapRouteManager.MapHttpRoute("MyModule", "default", "{controller}/{action}", new[] { "MyCompany.Modules.MyModule.Controllers" }); 
    } 
} 

Это пример моего почтового метода. Я даже не могу попасть в точку останова в этом методе. Этот класс находится в папке с именем «Контроллеры».

namespace MyCompany.Modules.MyModule.Controllers 
{ 
    public class ExampleController : DnnApiController 
    { 
     [AllowAnonymous] 
     [ValidateAntiForgeryToken] 
     [HttpPost] 
     public HttpResponseMessage CustomObjectType(string value) 
     { 
      try 
      { 
       var oType = CustomObjectTypeHelper.GetObjectType(value); 

       switch (oType) 
       { 
        case CustomObjectType.Type1: 
         return Request.CreateResponse(HttpStatusCode.OK, "type1"); 
        case CustomObjectType.Type2: 
         return Request.CreateResponse(HttpStatusCode.OK, "type2"); 
        case CustomObjectType.Type3: 
         return Request.CreateResponse(HttpStatusCode.OK, "type3"); 
        case CustomObjectType.Type4: 
         return Request.CreateResponse(HttpStatusCode.OK, "type4"); 
        default: 
         throw new ArgumentOutOfRangeException("value", "Value format does not match a supported custom object type."); 
       } 
      } 
      catch(Exception ex) 
      { 
       Exceptions.LogException(ex); 
       return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, 
        "Card number format does not match a supported card type."); 
      } 
     } 
    } 
} 

Вот пример того, как я его назвал.

var sf = $.ServicesFramework(<%=ModuleId %>); 
var serviceUrl = sf.getServiceRoot('MyModule'); 

function getObjectType() { 
    var strNumber = $('<%=txtNumber.ClientID %>').val(); 

    try 
    { 
     $.ajax({ 
      type: "POST", 
      cache: false, 
      url: serviceUrl + "Example/CustomObjectType", 
      beforeSend: sf.setModuleHeaders, 
      data: strNumber 
     }).success(function(data, textStatus, jqXHR) { 
      alert(data); 
     }).fail(function (xhr, result, status) { 
      alert("Uh-oh, something broke: " + status); 
     }); 
    } catch (e) { 
     //Shouldn't do this but it's just for testing 
     alert(e.stack); 
    } 
} 

ответ

1

На самом деле это стало проблемой, когда WebAPI не любит использовать простые значения с помощью POST. Как только я изменил это, чтобы ожидать модель представления, метод найден.

Ответ на вопрос ниже:

Simple controller which takes POST is not found

Смежные вопросы