2013-02-21 5 views
14

Ich habe eine sehr einfache Web API 4-Controller über einige ältere Datenbank-Code. Das Unternehmen wie wie folgt aus:Parameter für POST Web API 4 Methode null, wenn von Fiddler mit JSON-Body aufgerufen

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; } 
} 

Das Verfahren sieht wie folgt aus:

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; 
    } 

Wenn ich durch Fiddler POST wie folgt aus:

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" 
} 

Ich erhalte eine Ausnahme von .NET und die item-Parameter ist null.

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

Was fehlt mir? Ich bin neu in der Web-API. Danke im Voraus.

+0

Sie in Ihrer Methode debuggen könnte 'PostEmployee' sehen diese Ausnahme, die Code-Zeile werfen? –

+1

Der Elementparameter ist null. Die Ausnahme tritt also auf, wenn ich darauf referenziere. –

Antwort

29

Ich denke, es ist das Anfrageformat in Fiddler. Versuchen Sie, die Zitate aus dem Content-Type-Header

Von dem Komponisten Registerkarte entfernen:

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

Anforderungsheader:

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

Anfrage Körper:

{ 
    "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" 
} 

Antwort:

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

Hören Sie hier Kinder - das ist eine warnende Geschichte davon, wie Sie älter werden, können Sie nicht mehr für 16 Stunden Tage arbeiten. Danke, Calvin - genau das ist es. Verwende JavaScript-Code in meiner Kopfzeile. Sie erhalten den grünen Check, weil Sie ein PoC gemacht haben. –

3

Ihre Fiedler-Request-Header sollte wie folgt sein:

Content-Type: application/json

+0

Und um ganz klar zu sein - die Kopfzeile erscheint im oberen Teil des Fiddler Compose Dialogs, direkt unter den Kopfzeilen "User-Agent" und "Content-Length", die Fiddler automatisch hinzufügt. Der Body im unteren Teil des Dialogs "Erstellen" sollte mit dem "{" des JSON-Körpers selbst beginnen. Dies ist wahrscheinlich für erfahrene Fiddler-Benutzer offensichtlich, aber es hat mich ein paar Mal gebraucht, um es richtig zu machen. –

Verwandte Themen