2013-06-05 45 views
2

我有一个Backbone.js应用程序,它调用我的一个WEB API自定义POST方法。下面是代码到我的自定义后Fiddler - asp.net web api自定义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内部错误。不知道什么是错的

//提琴手TEST

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



Request Body 

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

感谢您的帮助

+0

你用来测试这个的请求是什么?另外'PostUserInfo'中的代码可能是相关的。 – Andrei

+0

值参数本身被设置为空。 – Harish

+0

这正是你如何用小提琴进行测试的吗?由于默认情况下,fiddler以查询字符串的形式期望body:'masAccess = true&reportAccess = false'。 – Andrei

回答

6

有几件事情:

的EmployeeDTO不应该是routeTemplate的一部分,安德烈提及。

根据JSONlint.com,您的请求正文无效JSON。尝试

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

此外,您可能需要将标题Content-Type: application/json添加到您的Fiddler请求中。

+1

我认为它与路由器配置中的EmployeeDTO无关。我只需在标题中设置Content-Type:application/json。谢啦。这是一件非常简单的事情,我错过了。 – Harish

+0

是啊......我也缺少'Content-Type:application/json'。感谢您的领导! :) –

相关问题