2013-02-21 8 views
14

ile Fiddler'den çağrıldığında bazı eski veritabanı kodlarına göre çok basit bir Web API 4 denetleyicim var. Böyle böyle varlık:POST Web API 4 için parametre parametresi JSID gövdesi

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

yöntem aşağıdaki gibidir:

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

böyle Fiddler aracılığıyla POST:

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

Ben .NET ve bir istisna olsun öğe parametresi boş.

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

Neyi eksik? Web API'sinde yeniyim. Şimdiden teşekkürler.

+0

Bu istisna hangi kod satırı görmek için yönteme 'PostEmployee' içine hata ayıklama olabilir application/json? –

+1

Öğe parametresi boş. Yani istisna, referans ettiğimde ortaya çıkar. –

cevap

29

Bu, Fiddler'daki istek biçimi olduğunu düşünüyorum. Besteci sekmesinden Content-Type başlığına

tırnak işaretlerini kaldırmayı deneyin:

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

talep Başlıkları:

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

talep Gövde:

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

Tepki:

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

Burada çocukları dinleyin - bu, yaşlandıkça artık 16 saat boyunca çalışamayacağınız bir uyarıcı hikaye. Teşekkürler, Calvin - tam olarak bu. Başlığımda kullanılan JavaScript kodu. Yeşil kontrolü aldın çünkü bir PoC yaptın. –

3

Kişisel kemancı isteği başlık şöyle olmalıdır:

Content-Type:

+0

Ve sadece tamamen açık olmak gerekirse - başlık, Fiddler Compose iletişim kutusunun üst kısmında, Fiddler'ın otomatik olarak eklediği "User-Agent" ve "Content-Length" başlıkları altında görünür. Compose iletişim kutusunun alt kısmındaki gövde, JSON gövdesinin kendisinde "{" ile başlamalıdır. Bu muhtemelen daha deneyimli Fiddler kullanıcıları için açıktır ama doğru olması için birkaç kez beni aldı. –