C# 使用tfs api将工作项插入tfs

C# 使用tfs api将工作项插入tfs,c#,asp.net,visual-studio,tfs,tfs-sdk,C#,Asp.net,Visual Studio,Tfs,Tfs Sdk,我正在构建一个网页,使用TFSAPI将TFS工作项插入TFS 我正在使用凭据连接到TFS服务器 每次有人使用TFS网页创建TFS工作项时,它都会创建 我的名字下的工作项,因为我是连接到TFS服务器的工作项。 有没有一种方法可以在用户登录到我的帐户时创建工作项 web应用程序并创建了工作项 我可以访问用户名,但不能访问用户密码 protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e)

我正在构建一个网页,使用TFSAPI将TFS工作项插入TFS

我正在使用凭据连接到TFS服务器

每次有人使用TFS网页创建TFS工作项时,它都会创建 我的名字下的工作项,因为我是连接到TFS服务器的工作项。 有没有一种方法可以在用户登录到我的帐户时创建工作项 web应用程序并创建了工作项

我可以访问用户名,但不能访问用户密码

protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e)
        {
        Uri url = new Uri("url");

            NetworkCredential nc = new NetworkCredential();

            TfsTeamProjectCollection coll = new TfsTeamProjectCollection(url, nc);

            coll.EnsureAuthenticated();

            WorkItemStore workItemStore = coll.GetService<WorkItemStore>();
            Project teamproject = workItemStore.Projects["ABC"];
            WorkItemType workItemType = teamproject.WorkItemTypes["Issue"];

            WorkItem wi = new WorkItem(workItemType);

            wi.Title = ((TextBox)FormView1.FindControl("txtTaskTitle")).Text;   

            wi.Save();

        }

您可以尝试设置“创建人”字段:

wi.Fields[“System.CreatedBy”].Value=“TfsService”

根据,您可能需要成为项目集合服务帐户的成员

另外,请参见。看起来您可能只能在第一次修订时修改“创建人”字段。。。或者,您可以尝试创建WorkItemStore(而不是使用服务)并使用此标志:
WorkItemStoreFlags.BypassRules
尝试以下操作:

tfstreamprojectcollection coll=新的tfstreamprojectcollection(url,CredentialCache.DefaultCredentials)


摆脱整个网络认证的事情。

你需要做两件事。首先,遵循Etienne的建议,删除凭据或通过默认设置

其次,您需要在web应用程序中启用“模拟”:


如果您在TFS服务器上运行web应用程序,那么这样做很好。但是,如果您想在其他地方运行它,您还需要一个kerberos令牌来允许您将凭据传递到TFS服务器。这通常称为双跳身份验证。要使其正常工作,您必须使用Active Directory进行一些搞笑游戏,并为您运行网站的帐户设置服务主体名称(SPN)。

谢谢!但我正在为“CreatedBy”寻找一些东西。。不“分配给”。我想我们在创建工作项之后分配它。@PowerCoder啊,我误解了。在这种情况下,此链接可能会有所帮助。它不引用创建人,但正在设置创建日期。我想你也需要做类似的事情。我试过上面的领域。我收到一个错误“附加信息:TF26194:无法更改字段“创建人”的值”。YY您不想使用旁路规则,它通常仅用于迁移目的,可能弊大于利。对于PowerCoder的要求,它没有任何用处。
       Uri url = new Uri("url");

        var collection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(url);
        var workItemStore = new WorkItemStore(collection, WorkItemStoreFlags.BypassRules);

        Project teamproject = workItemStore.Projects["ABC"];
        WorkItemType workItemType = teamproject.WorkItemTypes["Issue"];

        WorkItem wi = new WorkItem(workItemType);

        string s = "Name";
        wi.Fields["System.CreatedBy"].Value = s;

        wi.Title = "Test Item";
        wi.Save();