1


BugTracker.NET BugTracker.NET APIドキュメントのドキュメントページを読ん で、GETまたはPOSTを使用する必要があることに気付きました。これは、認めざるを得ませんが、あまり得意ではありません。私は考えていた:

  • C#アプリケーション(またはVB.NET)からBugTracker.NETにバグを簡単に送信するために使用できるライブラリはありますか?
    または、
  • ライブラリがない場合。GETまたはPOSTを使用してBugTracker.NETにバグを送信するにはどうすればよいですか?
4

4 に答える 4

2

.Netを使用してPOSTリクエストを行う方法のドキュメントからこの簡単な例を確認してください。BugTracker.NET API要件に従って、POSTされる変数を設定してください。

于 2009-10-05T18:28:33.220 に答える
1

以下は、pop3サーバーから電子メールを読み取り、それらをバグとしてinsert_bug.aspxページに送信するBugTracker.NETのサービスからのコードです。しかし、これほど複雑である必要はありません。

このURLを呼び出すだけでも機能します。

http:\\ YOUR-HOST \ insert_bug.aspx?username = YOU&password = YOUR-PASSWORD&short_desc = This + is + a + bug

より複雑なコード:



            string post_data = "username =" + HttpUtility.UrlEncode(ServiceUsername)
                + "&password =" + HttpUtility.UrlEncode(ServicePassword)
                + "&projectid =" + Convert.ToString(projectid)
                + "&from =" + HttpUtility.UrlEncode(from)
                + "&short_desc =" + HttpUtility.UrlEncode(subject)
                + "&message =" + HttpUtility.UrlEncode(message);

            byte [] bytes = Encoding.UTF8.GetBytes(post_data);


            //リクエストをウェブサーバーに送信します
            HttpWebResponse res = null;
            試す
            {{
                HttpWebRequest req =(HttpWebRequest)System.Net.WebRequest.Create(Url);


                req.Credentials = CredentialCache.DefaultCredentials;
                req.PreAuthenticate = true;

                //req.Timeout = 200; // 多分?
                //req.KeepAlive = false; // 多分?

                req.Method = "POST";
                req.ContentType = "application / x-www-form-urlencoded";
                req.ContentLength = bytes.Length;
                ストリームrequest_stream=req.GetRequestStream();
                request_stream.Write(bytes、0、bytes.Length);
                request_stream.Close();
                res =(HttpWebResponse)req.GetResponse();
            }
            キャッチ(例外e)
            {{
                write_line( "HttpWebRequest error url =" + Url);
                write_line(e);
            }

            //応答を調べます

            if(res!= null){

                int http_status =(int)res.StatusCode;
                write_line(Convert.ToString(http_status));

                文字列http_response_header=res.Headers ["BTNET"];
                res.Close();

                if(http_response_header!= null)
                {{
                    write_line(http_response_header);

                    //pop3サーバーからメッセージを削除するのは
                    //Webサーバーに保存したことを確認します
                    if(MessageInputFile == ""
                    && http_status == 200
                    && DeleteMessagesOnServer == "1"
                    && http_response_header.IndexOf( "OK")== 0)
                    {{
                        write_line( "POP3コマンドDELEの送信");
                        write_line(client.DELE(message_number));
                    }
                }
                そうしないと
                {{
                    write_line( "BTNET HTTPヘッダーが見つかりません。サーバーからの電子メールの削除をスキップします。");
                    write_line( "合計エラー数の増分");
                    total_error_count ++;
                }
            }
            そうしないと
            {{
                write_line( "Webサーバーからの応答がありません。サーバーからの電子メールの削除をスキップします。");
                write_line( "合計エラー数の増分");
                total_error_count ++;
            }

于 2009-10-06T12:23:03.650 に答える
0

回答ありがとうございます。Web上の回答やその他のリソースを使用して、BugTracker.NETに新しいバグを送信するためのメソッドをまとめました
。このメソッドは成功または失敗を示すブール値を返し、ステータスを示すメッセージをユーザーに表示します。
この動作は、ニーズに合わせて変更できます。このメソッドはPOSTメソッドを使用してバグを送信します。これは、コメント内の長いテキストを送信するのに役立ちます(コメント内のログファイルの内容を送信しようとしましたが、機能しました)。

コードは次のとおりです。

public bool SubmitBugToBugTracker(string serverName,
                                        bool useProxy,
                                        string proxyHost,
                                        int proxyPort,
                                        string userName,
                                        string password,
                                        string description,
                                        string comment,
                                        int projectId)
    {
        if (!serverName.EndsWith(@"/"))
        {
            serverName += @"/";
        }
        string requestUrl = serverName + "insert_bug.aspx";
        string requestMethod = "POST";
        string requestContentType = "application/x-www-form-urlencoded";
        string requestParameters = "username=" + userName
                                  + "&password=" + password
                                  + "&short_desc=" + description
                                  + "&comment=" + comment
                                  + "&projectid=" + projectId;
        // POST parameters (postvars)
        byte[] buffer = Encoding.ASCII.GetBytes(requestParameters);
        // Initialisation
        HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(requestUrl);
        // Add proxy info if used.
        if (useProxy)
        {
            WebReq.Proxy = new WebProxy(proxyHost, proxyPort);
        }

        // Method is POST
        WebReq.Method = requestMethod;
        // ContentType, for the postvars.
        WebReq.ContentType = requestContentType;
        // Length of the buffer (postvars) is used as contentlength.
        WebReq.ContentLength = buffer.Length;
        // Open a stream for writing the postvars
        Stream PostData = WebReq.GetRequestStream();
        //Now we write, and afterwards, we close. Closing is always important!
        PostData.Write(buffer, 0, buffer.Length);
        PostData.Close();
        // Get the response handle, we have no true response yet!
        HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
        // Read the response (the string)
        Stream Answer = WebResp.GetResponseStream();
        StreamReader _Answer = new StreamReader(Answer);
        string responseStream = _Answer.ReadToEnd();

        // Find out if bug submission was successfull.
        if (responseStream.StartsWith("OK:"))
        {
            MessageBox.Show("Bug submitted successfully.");
            return true;
        }
        else if (responseStream.StartsWith("ERROR:"))
        {
            MessageBox.Show("Error occured. Bug hasn't been submitted.\nError Message: " + responseStream);
            return false;
        }
        else
        {
            MessageBox.Show("Error occured. Bug hasn't been submitted.\nError Message: " + responseStream);
            return false;
        }
    }
于 2009-10-06T19:57:02.703 に答える
0

私はその方法を使用していましたが、提出されたバグと一緒にパスワードを送信するのは好きではありませんでした。さまざまな理由から、LDAP認証ではなく内部のBugTrackerパスワードシステムを使用しているため、BugTrackerのパスワードはわかりません。私の場合、すべてのユーザーはバグを送信する権限があり、ログインはLANIDです。そのため、アプリケーションの認証済みインスタンスから、報告された問題を収集し、問題を報告しているプロジェクトID、プログラム、およびクラスをキャプチャし、BugTracker DBのストアドプロシージャを呼び出して、アイテムを直接挿入します。

もちろん、これはデータベースに直接含まれており、将来のアップグレードで問題が発生する可能性があるという欠点がありますが、現在はうまく機能しています。

(SQL2005 / 2008)

CREATE PROCEDURE [dbo].[Add_Bug]
@strUsername as varchar(20) = '', 
@intProjID as integer = 0,
@strSubject as varchar(200),
@strComment as text
AS
    BEGIN
SET NOCOUNT ON;

declare @us_id as integer
declare @us_org as integer
declare @st_id as integer
declare @priority as integer
declare @category as integer
declare @errorreturn as integer
declare @assigneduser as integer

declare @newbugid as integer

if (@intProjID = 0 or RTRIM(@strUsername) = '') 
    RETURN -1

set @priority = 3 -- default to LOW
set @category = 1 -- default to bug

-- look up us_id, us_org from users where us_username = 'lanid'

set @us_id = 0

BEGIN TRY

    BEGIN TRANSACTION

    select @us_id = us_id, @us_org = us_org from BugTracker.dbo.users 
    where us_username = @strUsername

    if (@@ROWCOUNT = 0 or @us_id = 0 )
    BEGIN
        -- set to default values to allow entry anyway
        -- if not found default to the autobug reporter
                    -- this is a separate account created just for these reports
        set @us_id = 36     
        set @us_org = 6     
    END

    select @assigneduser = pj_default_user from projects 
                    where pj_id = @intProjID and 
        pj_auto_assign_default_user = 1

    if (@@ROWCOUNT <> 1)
        set @assigneduser = NULL

    -- get default status as st_id from statuses where st_default = 1

    select @st_id = st_id from BugTracker.dbo.statuses where st_default = 1 

    -- now insert the bug and post comments

    insert into bugs (bg_short_desc, bg_reported_user, bg_reported_date,
            bg_status, bg_priority, bg_org, bg_category, bg_project,                     
            bg_assigned_to_user, bg_last_updated_user, bg_last_updated_date) 
    values ( @strSubject, @us_id, getdate(), @st_id, @priority, @us_org,
            @category, @intProjID, @assigneduser, @us_id, getdate())

    if @@ERROR <> 0
        BEGIN
        ROLLBACK TRANSACTION
        END
    ELSE
        BEGIN

        select @newbugid = @@IDENTITY

        insert into bug_posts (bp_bug, bp_type, bp_user, bp_date,
                    bp_comment, bp_hidden_from_external_users)
        values (@newbugid, 'comment', @us_id, getdate(), @strComment, 0)

        if @@ERROR <> 0
            ROLLBACK TRANSACTION
        END
END TRY

BEGIN CATCH
    ROLLBACK TRANSACTION
    RETURN -2
END CATCH   

IF (@@TRANCOUNT > 0)
    COMMIT TRANSACTION

RETURN @newbugid

END
于 2012-12-27T16:34:15.507 に答える