Question

La lecture de la page de documentation de BugTracker.NET
BugTracker.NET J'ai réalisé que je dois utiliser GET ou POST qui, je dois l'avouer, je ne suis pas très bon. Je me demandais:

  • Y at-il une bibliothèque qui pourrait être utilisé pour soumettre facilement des bugs à BugTracker.NET d'une application C # (ou VB.NET)?
    Ou,
  • S'il n'y a pas de bibliothèque. Comment utiliser GET ou POST pour soumettre des bogues à BugTracker.NET?
Était-ce utile?

La solution 3

Merci à tous pour vos réponses. En utilisant vos réponses et d'autres ressources sur le web, je l'ai mis en place une méthode pour soumettre un nouveau bug à BugTracker.NET
La méthode renvoie une valeur booléenne indiquant le succès ou l'échec et il affiche un message à l'utilisateur avec le statut.
Ce comportement pourrait être modifié pour répondre à vos besoins. La méthode utilise la méthode POST pour soumettre des bogues qui aide à soumettre tout texte long dans le commentaire (je l'ai essayé de présenter le contenu d'un fichier journal dans les commentaires et cela a fonctionné).

Voici le code:

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

Autres conseils

Vérifiez cet exemple simple de la documentation de la façon de faire une requête POST en utilisant .Net. Assurez-vous de mettre en place les variables affichées dans en fonction des besoins de l'API BugTracker.NET.

Voici le code du service de BugTracker.NET qui lit des e-mails à partir d'un serveur pop3 et les soumet alors que des bugs à la page insert_bug.aspx. Mais il ne doit pas être si compliqué.

Il suffit d'invoquer cette URL travaillera également:

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

Le code plus complexe:

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


            // send request to web server
            HttpWebResponse res = null;
            try
            {
                HttpWebRequest req = (HttpWebRequest) System.Net.WebRequest.Create(Url);


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

                //req.Timeout = 200; // maybe?
                //req.KeepAlive = false; // maybe?

                req.Method = "POST";
                req.ContentType= "application/x-www-form-urlencoded";
                req.ContentLength=bytes.Length;
                Stream request_stream = req.GetRequestStream();
                request_stream.Write(bytes,0,bytes.Length);
                request_stream.Close();
                res = (HttpWebResponse) req.GetResponse();
            }
            catch (Exception e)
            {
                write_line("HttpWebRequest error url=" + Url);
                write_line(e);
            }

            // examine response

            if (res != null) {

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

                string http_response_header = res.Headers["BTNET"];
                res.Close();

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

                    // only delete message from pop3 server if we
                    // know we stored in on the web server ok
                    if (MessageInputFile == ""
                    && http_status == 200
                    && DeleteMessagesOnServer == "1"
                    && http_response_header.IndexOf("OK") == 0)
                    {
                        write_line ("sending POP3 command DELE");
                        write_line (client.DELE (message_number));
                    }
                }
                else
                {
                    write_line("BTNET HTTP header not found.  Skipping the delete of the email from the server.");
                    write_line("Incrementing total error count");
                    total_error_count++;
                }
            }
            else
            {
                write_line("No response from web server.  Skipping the delete of the email from the server.");
                write_line("Incrementing total error count");
                total_error_count++;
            }

J'utilisais cette méthode, mais ne pas aimé envoyer le mot de passe ainsi que le bogue soumis. Pour diverses raisons, nous utilisons le système de mot de passe BugTracker interne et pas d'authentification LDAP, de sorte que leurs mots de passe bugtracker ne nous sont pas connus. Dans mon cas, tous nos utilisateurs sont autorisés à soumettre des bogues, et leur connexion est leur carte d'identité LAN. Ainsi, à partir de leur exemple authentifiées de l'application, je collectionne leur problème signalé, saisir l'ID du projet, le programme et la classe où ils rapportent la question et appeler une procédure stockée dans le bugtracker DB pour insérer directement l'élément.

Le point négatif est bien sûr que ce soit directement dans la base de données et pourrait causer des problèmes avec les mises à jour futures, mais il fonctionne bien pour nous maintenant.

(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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top