如何提交错误BugTracker.NET 从C#应用程序?
-
19-09-2019 - |
题
阅读的文件页BugTracker.NET
BugTracker.NET API文件
我意识到我需要获取或使用后,我必须承认,我不是很擅长。我想知道:
- 是否有一个图书馆,可以用来容易地提交错误BugTracker.NET 从C#应用程序(或VB.NET)?
或者, - 如果没有图书馆。如何可以利用获得或后提交的错误BugTracker.NET ?
解决方案 3
谢谢你的答案。使用你的答案和其他资源,在网络上,我已经把一方法提交一个新的错误BugTracker.NET
该方法返回布尔的价值,表明成功或失败和显示信息的用户的地位。
这种行为可以被改变以配合你的需要。该方法使用后提交方法错误,它可以帮助提交任何长的文本的评论(我已经试图提交的内容登录文件的评论和它的工作).
这里的代码:
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;
}
}
其他提示
检查这个简单的例子 从文件 如何使职位要求使用。网。只是一定要设立的变量被张贴在根据BugTracker.NET API的要求。
下面是代码BugTracker.NET's服务内容的电子邮件从pop3server然后提交它们作为错误的insert_bug.aspx页。但它没有将这种复杂。
只是用这个网址也将工作:
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); // 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++; }
我是使用该方法,但并没有像发送密码随着提交的错误。由于各种原因,我们使用内部的错误追踪系统的密码系统,而不LDAP身份验证,所以他们的错误追踪系统的密码是不知道给我们。在我的情况下,我们所有的用户被授权提交的错误,他们登录自己的局域网ID。因此,从他们的身份验证的应用程序的实例,我收集他们的报告的问题,捕获的项目标识、程序和类,它们是报告的问题,并呼存储的过程中错误追踪系统数据库直接插入该项目。
负面的课程,这是直接进入数据库以及潜在的可能导致问题与未来的升级,但它是运作良好,为我们的现在。
(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
不隶属于 StackOverflow