2012-12-20 21 views
5

Tôi đã đọc một câu trả lời trên số https://answers.atlassian.com/questions/79902/using-httpclient-c-to-create-a-jira-issue-via-rest-generates-bad-request-response atlassian trong đó một người dùng đã tạo một vấn đề JIRA bằng mã sau đây. Tôi đã điều chỉnh nó nhưng gặp lỗi khi sử dụng vấn đề về lớp tự xây dựng với ObjectContentTạo vấn đề jira qua Rest C# httpClient

Http.HttpContent content = new Http.ObjectContent<Issue>(data, jsonFormatter); 

Trình biên dịch sẽ không chấp nhận. Có ai biết tại sao không?

public string CreateJiraIssue() 
     { 

      string data= @"{ ""fields"": { 
           ""project"": 
        { 
         ""key"": ""HELP"" 
        }, 
           ""summary"": ""Test Ticket"", 
           ""description"": ""Creating of an issue using project keys and issue type names using the REST API"", 
           ""issuetype"": { 
            ""name"": ""Ticket"" 
           }, 
           ""assignee"": { ""name"": ""user"" } 
          } 
      }"; 
      string postUrl = "https://xxx.jira.com/rest/api/2/"; 
      System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(); 
      client.BaseAddress = new System.Uri(postUrl); 
      byte[] cred = UTF8Encoding.UTF8.GetBytes("username:password"); 
      client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(cred)); 
      client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 
      System.Net.Http.Formatting.MediaTypeFormatter jsonFormatter = new System.Net.Http.Formatting.JsonMediaTypeFormatter(); 

      System.Net.Http.HttpContent content = new System.Net.Http.ObjectContent<Issue>(data, jsonFormatter); 
      System.Net.Http.HttpResponseMessage response = client.PostAsync("issue", content).Result; 
      if (response.IsSuccessStatusCode) 
      { 
       string result = response.Content.ReadAsStringAsync().Result; 
       return result; 
      } 
      else 
      { 
       return response.StatusCode.ToString(); 
      } 

Và sử dụng

namespace IOnotification_System 
{ 
    public class Issue 
    { 
     public Fields fields { get; set; } 
     public Issue() 
     { 
      fields = new Fields(); 
     } 
    } 

    public class Fields 
    { 
     public Project project { get; set; } 
     public string summary { get; set; } 
     public string description { get; set; } 
     public Assignee assignee { get; set; } 
     public IssueType issuetype { get; set; } 
     public Fields() 
     { 
      project = new Project(); 
      issuetype = new IssueType(); 
     } 
    } 

    public class Project 
    { 
     public string key { get; set; } 
    } 

    public class IssueType 
    { 
     public string name { get; set; } 
    } 
    public class Assignee 
    { 
     public string name { get; set; } 
    } 
} 
+1

Và lỗi này là? –

+0

Tôi không thể cho bạn biết chính xác bằng tiếng Anh, nhưng nó phải là một cái gì đó như: "Sự quá tải tốt nhất cho phương pháp System.Net.Http.ObjectContent .ObjectContent (IOnotification_System.Issue, System.Net.Http .Formatting.MediaTyoeFormatter) không tương thích với danh sách đối số – Simon

+0

Chỉ cần sao chép và dán thư từ trình biên dịch –

Trả lời

2

EDIT

Thông điệp nói rõ rằng System.Net.Http.ObjectContent() hy vọng một đối tượng phát hành cho tham số đầu tiên. Tôi hy vọng có một thông điệp khác ngay sau đó nói rằng không có sự chuyển đổi nào có thể từ một chuỗi thành một vấn đề.

Bạn đang chuyển một chuỗi tới phương thức dự kiến ​​đối tượng Sự cố. Trình định dạng được sử dụng để chuyển đổi một đối tượng Issue thành một chuỗi Json.

Bạn đã có chuỗi, do đó, không có vấn đề gì khi cố chuyển đổi nó. Bạn chỉ cần trình định dạng nếu bạn có một thể hiện Issue mà bạn muốn chuyển đổi thành một chuỗi Json. Bạn có thể sử dụng lớp StringContent và sử dụng tài sản Headers của nó để thêm bất kỳ tiêu đề chưa được thiết lập trên máy khách, ví dụ:

var content=new StringContent(data); 

gốc

được thông báo lỗi là gì và loại dự án nào khiến bạn sử dụng? Không gian tên System.Net.Http.Formatting là một phần của ASP.NET Web API. Bạn đang xây dựng một ứng dụng ASP.NET, một ứng dụng giao diện điều khiển, cái gì khác?

Nếu bạn KHÔNG xây dựng trang ASP.NET, mã này sẽ không hoạt động. Nếu vấn đề duy nhất của bạn là làm thế nào để phân tích các yêu cầu Json, chỉ cần sử dụng một lớp deserialization Json khác. Json.NET là một lựa chọn rất phổ biến.

Trong mọi trường hợp, không có lý do gì để sử dụng lớp Json để chuyển đổi chuỗi thành đối tượng HttpContent có chứa cùng chuỗi chính xác đó. Bạn có thể sử dụng lớp StringContent và sử dụng thuộc tính Headers để thêm bất kỳ tiêu đề nào chưa được đặt trên máy khách.

+0

Mmhh .. không chắc chắn liệu tôi có thể theo dõi bạn 100% hay không. Tôi thấy rằng tôi có một chuỗi, vì vậy tôi không cần phải chuyển đổi nó. Và có bạn đã đúng, có một tin nhắn ngay sau khi nó nói rằng không có chuyển đổi có thể từ một chuỗi để một vấn đề. Nhưng bây giờ tôi nhận được một lỗi http: UnsupportedMediaType. Điều đó không có nghĩa là có gì đó sai với chuỗi tôi vượt qua? – Simon

+0

Tôi sử dụng nó như một dịch vụ web. – Simon

+1

Nó hoạt động ngay bây giờ! Đã phải thêm var content = new StringContent (dữ liệu, Encoding.UTF8, "application/json"); Cảm ơn rất nhiều! – Simon

1

Sau đây thực hiện sự kỳ diệu:

var content = new StringContent(data, Encoding.UTF8, "application/json"); 
Các vấn đề liên quan