2013-06-05 3 views
2

У меня есть приложение Backbone.js, и он вызывает один из моих POST-методов WEB API. Вот код для моего пользовательского POSTFiddler - asp.net web api custom POST

WebApiConfig.cs

config.Routes.MapHttpRoute 
      (
       name: "UserAdministrationApi", 
       routeTemplate: "api/{controller}/PostUserInfo/{EmployeeDTO}", 
       defaults: new 
       { 
        EmployeeDTO = RouteParameter.Optional, 
        controller = "UserAdministration", 
        action = "PostUserInfo", 
       }); 

Контроллер

 [HttpPost] 
     [ActionName("PostUserInfo")] 
     public HttpResponseMessage PostUserInfo(EmployeeDTO value) 
     { 
      // handling POST 
     } 

EmployeeDTO

public class EmployeeDTO 
    { 
    public bool masAccess { get; set; } 
    public bool reportAccess { get; set; } 
    public string name { get; set; } 
    public string office { get; set; } 
    } 

Когда я пытаюсь проверить это в Скрипач даже перед выходом на протестируйте его с помощью кода Backbone.js, я получаю 500 внутренних ошибок. Не уверен, что это неправильно

// FIDDLER TEST

POST : http://localhost:56501/api/useradministration/PostUserInfo 



Request Body 

    { 
    masAccess:"true" 
    reportAccess:"false" 
    } 

Спасибо за помощь

+0

Каков запрос, который вы используете для проверки этого? Также может иметь значение код внутри 'PostUserInfo'. – Andrei

+0

параметр value получает значение null. – Harish

+0

Это именно то, как вы тестируете его с помощью скрипача? Поскольку по умолчанию fiddler ожидает тело в форме строки запроса: 'masAccess = true & reportAccess = false'. – Andrei

ответ

6

несколько вещей:

EmployeeDTO не должны быть частью routeTemplate, как уже упоминалось Андрей.

Ваш орган запроса недействителен JSON согласно JSONlint.com. Попробуйте

{ 
    "masAccess": "true", 
    "reportAccess": "false" 
} 

Кроме того, вам может понадобиться, чтобы добавить заголовок Content-Type: application/json к вашему запросу Скрипач.

+1

Я думаю, что это не имеет никакого отношения к EmployeeDTO в конфигурации маршрутизатора. Мне просто нужно было установить Content-Type: application/json в заголовке. Спасибо чувак. Это очень простая вещь, и я пропустил это. – Harish

+0

Да ... Мне также не хватало 'Content-Type: application/json'. Спасибо за головы! :) –