2013-02-21 1 views
14

私は非常にシンプルなWeb API 4コントローラをいくつかのレガシーデータベースコードに持っています。このようなようなエンティティは:JSON本体でFiddlerから呼び出されたときのPOST Web API 4メソッドのパラメータ

public class Employee 
{ 
    public string EmploymentStatus { get; set; } 
    public string CompanyCode { get; set; } 
    public string Division { get; set; } 
    public string OrgLevel1Code { get; set; } 
    public string OrgLevel2Code { get; set; } 
    public string OrgLevel3 { get; set; } 
    public string StoreName { get; set; } 
    public string EmployeeNumber { get; set; } 
    public string EmployeeFirstName { get; set; } 
    public string EmployeeMiddleInitial { get; set; } 
    public string EmployeeLastName { get; set; } 
    public string EmailAddress { get; set; } 
    public string JobCode { get; set; } 
    public string DateInJob { get; set; } 
    public string OriginalHire { get; set; } 
} 

方法は次のようになります。

public HttpResponseMessage PostEmployee(Employee item) 
    { 
     DataHelpers.AddUser(item.CompanyCode, item.Division, item.OrgLevel1Code, item.OrgLevel2Code, item.OrgLevel3, item.EmployeeFirstName, item.EmployeeMiddleInitial, item.EmployeeLastName, item.EmailAddress, item.JobCode, item.OriginalHire); 
     var response = Request.CreateResponse<Employee>(HttpStatusCode.Created, item); 
     string uri = Url.Link("DefaultApi", new { id = item.EmployeeNumber }); 
     response.Headers.Location = new Uri(uri); 
     return response; 
    } 

私はこのようなフィドラーを通じてポスト:

POST /api/identity HTTP/1.1 
User-Agent: Fiddler 
Host: localhost:1421 
Content-Length: 382 
contentType: "application/json; charset=utf-8" 
dataType: 'json' 

{ 
"employmentStatus":"zzz", 
"companyCode":"Titlemax", 
"division":"bbb", 
"orgLevel1Code":"ccc", 
"orgLevel2Code":"ddd", 
"orgLevel3":"eee", 
"storeName":"fff", 
"employeeNumber":"12343", 
"employeeFirstName":"Bill", 
"employeeMiddleInitial":"A", 
"employeeLastName":"sempf", 
"emailAddress":"[email protected]", 
"jobCode":"GM", 
"dateInJob":"8/7/2005", 
"originalHire":"8/7/2005" 
} 

私は.NETとから例外を取得itemパラメータがnullです。

{"Message":"An error has occurred.","ExceptionMessage":"Object reference not set to an instance of an object.","ExceptionType":"System.NullReferenceException"} 

何が欠けていますか?私はWeb APIの初心者です。前もって感謝します。

+0

あなたはこの例外をスローしたコード行を参照するためにあなたの方法 'PostEmployee'にデバッグすることができ、アプリケーション/ JSON? –

+1

itemパラメータはnullです。だから私はそれを参照するときに例外が発生します。 –

答えて

29

私はそれがFiddlerのリクエストフォーマットだと思います。作曲]タブから、Content-Typeヘッダ

から引用符を削除してください:

POST http://localhost:1421/api/identity HTTP/1.1 

リクエストヘッダ:

User-Agent: Fiddler 
Host: localhost:1421 
Content-Type: application/json; charset=utf-8 

リクエストボディ:

{ 
    "employmentStatus":"zzz", 
    "companyCode":"Titlemax", 
    "division":"bbb", 
    "orgLevel1Code":"ccc", 
    "orgLevel2Code":"ddd", 
    "orgLevel3":"eee", 
    "storeName":"fff", 
    "employeeNumber":"12343", 
    "employeeFirstName":"Bill", 
    "employeeMiddleInitial":"A", 
    "employeeLastName":"sempf", 
    "emailAddress":"[email protected]", 
    "jobCode":"GM", 
    "dateInJob":"8/7/2005", 
    "originalHire":"8/7/2005" 
} 

応答:

HTTP/1.1 201 Created 
Cache-Control: no-cache 
Pragma: no-cache 
Content-Type: application/json; charset=utf-8 
Expires: -1 
Location: http://localhost:1421/api/identity/12343 
Server: Microsoft-IIS/8.0 
X-AspNet-Version: 4.0.30319 
X-SourceFiles: =?UTF-8?B?YzpcdXNlcnNcY2FsdmlfMDAwXGRvY3VtZW50c1x2aXN1YWwgc3R1ZGlvIDIwMTJcUHJvamVjdHNcTXZjQXBwbGljYXRpb24yXE12Y0FwcGxpY2F0aW9uMlxhcGlcaWRlbnRpdHk=?= 
X-Powered-By: ASP.NET 
Date: Thu, 21 Feb 2013 03:53:04 GMT 
Content-Length: 351 

{"EmploymentStatus":"zzz","CompanyCode":"Titlemax","Division":"bbb","OrgLevel1Code":"ccc","OrgLevel2Code":"ddd","OrgLevel3":"eee","StoreName":"fff","EmployeeNumber":"12343","EmployeeFirstName":"Bill","EmployeeMiddleInitial":"A","EmployeeLastName":"sempf","EmailAddress":"[email protected]","JobCode":"GM","DateInJob":"8/7/2005","OriginalHire":"8/7/2005"} 
+4

ここに聞いてください、子供たち - これはあなたが年を取るにつれて、もう16時間は働くことができないという注意の物語です。ありがとう、カルヴァン - それはまさにそれです。私のヘッダーに使用されているJavaScriptコード。 PoCを行ったので緑色のチェックが表示されます。 –

3

あなたのシオマネキリクエストヘッダは次のようにする必要があります:

のContent-Type:

+0

ちょうど完全に明確にするために、ヘッダーはFiddler Composeダイアログの上部に表示され、Fiddlerが自動的に追加する「User-Agent」と「Content-Length」ヘッダーの下に表示されます。 「作成」ダイアログの下部の本文は、JSON本体自体の「{」で始まる必要があります。これはおそらく経験豊富なFiddlerユーザーにとっては明らかですが、それを正しくするには数回かかりました。 –

関連する問題