我现在已经尝试了几个小时来让OAuth继续使用我正在研究的API,显然我的做法一定是错的,因为我经常遇到死胡同.
我得到的:
- 一个在.NET MVC中实现的API,它以XML或JSON的形式返回数据结果.
- 它需要API密钥才能使用API.
- 用于管理API密钥的后端网站(X).
- 另一个网站(Y),其中包含此API从中提取数据的大量数据.
我应该得到的:
- 能够让API密钥从网站(Y)访问用户的数据,如果他们通过OAuth(1.0A)自己允许的话.
我尝试过:
- 到目前为止,我的方法是使用DotNetOpenAuth库,但几乎所有关于如何实现OpenId,OAuth名称空间中的某些类甚至似乎都硬编码为OpenId功能.所以我一直试图看看使用OpenId的示例中发生了什么,看看我是否可以使用其中的一部分来实现没有OpenId的OAuth.
- 在服务器端,各种方法包括读取"UnauthorizedTokenRequest"并通过调用ServiceProvider.Channel.PrepareResponse(unauthorizedTokenRequest).AsActionResult()返回它.AsActionResult()由于某种原因尝试将两个nonce和timestamp值添加到响应崩溃,并跳过它,它仍然返回一个我无法在客户端读取的响应.
所以我想,我的问题是:
先感谢您!
- 丹麦约翰尼
我承认,我对使用Interop库非常陌生,但人们似乎总是给出的建议是,记录一个宏并查看vba代码.问题是,宏没有准确记录我正在做的事情:单击快速样式将其应用于当前选择.
我的任务非常简单:我需要将快速样式应用于段落(Microsoft.Office.Interop.Word.Paragraph).但是,使用set_style命令仅应用基本格式,并且段落保持原始快速样式选择(正常).
使用Remou的方法虽然对我有用,但它看起来与我自己的代码非常相似,我无法使它工作,我认为这可能是我对对象模型的理解有点过时了.
public void AddParagraph(string text, string styleName = null)
{
Paragraph paragraph = _document.Content.Paragraphs.Add();
if (styleName != null)
{
paragraph.Range.set_Style(_document.Styles[styleName]);
}
paragraph.Range.Text = text;
paragraph.Range.InsertParagraphAfter();
}
Run Code Online (Sandbox Code Playgroud)
然后我用eg调用它AddParagraph("A title", "Heading 1");
,但是使用上面的包装器构建我的文档的结果是,没有应用完整的样式,只有字体,颜色,大小和粗体/斜体.
我使用自己的.dotx
文件,使用我自己定义和命名的样式,但只是从Remou复制代码使用我自己的模板,所以我不认为这是问题,并且使用该代码我无法弄清楚如何用自己的样式附加多个段落.
任何人都可以指出我的方法有什么问题,或者至少我如何能够让Remou为我的要求提供答案?:)
我们的 CI/CD 目前已建立,因此我们会在 PR 完成后不断生成安装程序。然而,这是我们的内部管道。当我们准备好发布时,我们会打开一个稳定分支(发布分支),在其中执行各种操作,例如轻按二进制文件中的开关,以便它们不再将它们呈现为内部测试二进制文件,而是常规生产二进制文件。
问题出在 WorkItem 跟踪中。发布分支上的第一个构建显示为包含自第 0 天以来包含的每个工作项,甚至将构建添加到工作项中。但我们只对标记 PR 中针对新发布分支的工作项感兴趣,而不是直到分支创建点为止的整个历史记录。
以下是我们如何拓展业务的概述。“4.9.6”仅包含 1 个 PR(2 个提交和 1 个合并提交),master 分支继续前进:
这是在发布分支上触发的第一个 CI 构建:
由于某种原因,它似乎只包含了最新的 50 个提交(我相信它刚刚达到上限),这也导致了一长串“链接的工作项”。然而,在“4.9.6”分支的生命周期中,唯一的 PR 中只包含 1 个工作项。
是否有可能以某种方式避免这种情况,或者只是解决该问题的一种方法?
我不确定如何使这个问题可读/可理解,但听到我的意见,我希望你能在我们结束时理解我的问题(至少,它很容易重现).
我尝试调用一个用于在UnitTests中验证结果的方法.它有以下签名:
void AssertPropertyValues<TEnumerable, TElement, TProperty>(
TEnumerable enumerable,
Func<TElement, TProperty> propertyPointer,
params TProperty[] expectedValues)
where TEnumerable : System.Collections.Generic.IList<TElement>
Run Code Online (Sandbox Code Playgroud)
这意味着,它需要以下输入
因此,此方法的实际执行可能如下所示:
AssertPropertyValues(
item.ItemGroups,
itemGroup => itemGroup.Name,
"Name1", "Name2", "Name3");
Run Code Online (Sandbox Code Playgroud)
至少,这就是我希望它看起来像,但我遇到了众所周知的编译器错误:"方法'X'的类型参数不能从使用中推断出来.",这就是我不知道的了解.它应该具有我所能看到的所有信息,或者它可能是"协方差和反演"问题的另一个版本?
所以现在我不得不这样做:
AssertPropertyValues(
item.ItemGroups,
(ItemGroup itemGroup) => itemGroup.Name,
"Name1", "Name2", "Name3");
Run Code Online (Sandbox Code Playgroud)
任何人都可以指出为什么编译器无法推断出这种情况?
我正在尝试创建一个简单的模型,用于使用YamlDotNet将 yaml 文件解析为我的域对象。需要注意的是,我希望域模型是只读的,所以我试图通过继承和内部设置器来解决这个问题。
但出于某种原因,库抛出了一个异常,说明:
在类型“ConsoleApplication1.Repositories.YamlTemplateRepository+DeserializeableTemplate”上找不到属性“?HtmlTemplate”。
我正在使用别名,但即使刮擦它,并且使用具有正确属性名称的测试类也不能正确设置。
我究竟做错了什么?我是否误解了图书馆应该如何使用?
调用 YamlDotNet 的代码如下所示:
deserializer.Deserialize<DeserializeableTemplate>(yamlContents);
Run Code Online (Sandbox Code Playgroud)
我正在反序列化的类如下所示:
private class DeserializeableTemplate : Template
{
[YamlMember(Alias = "HtmlTemplate")]
public string HtmlTemplateWrapper
{
get { return HtmlTemplate; }
set { HtmlTemplate = value; }
}
// A few more properties...
}
Run Code Online (Sandbox Code Playgroud)
和我继承的课程:
public class Template
{
public string HtmlTemplate { get; internal set; }
// A few more properties...
}
Run Code Online (Sandbox Code Playgroud)
我们开发了一个通过 Windows Installer 分发的应用程序,该应用程序是使用 WiX 创建的,我们的客户可以从任何旧版本升级到最新版本。
然而,我们的最新版本删除了 2 个 dll,这只能通过重新安装来纠正。
Microsoft.IdentityModel.Protocol.Extensions已从Nuget 版本 1.0.2.206221351和文件版本 1.0.20622.1351 升级到Nuget 版本 1.0.4.403061554和文件版本 1.0.4.54。
System.IdentityModel.Tokens.Jwt的文件版本控制也发生了类似的变化,从Nuget 版本 4.0.2.206221351到Nuget 版本 4.0.4.403061554。
因此,通过更改文件版本的计算方式,MS 有效地将版本更改为之前的降级版本(从构建版本的 20622 更改为 4)。
有人称其为错误,有人称其为功能,但发生的情况是,MSI 有一个步骤,它会记录所有需要升级的文件,然后卸载当前版本,然后仅安装需要升级的文件。版本没有变化或升级 - 任何降级都被排除在外。
我们正在将该产品运送给许多不同的客户,他们的技术技能也各不相同,因此升级效果更好,否则我们将面临大量支持问题。有什么我可以改变的,而不需要实际禁用诸如 MSI 在出现错误时回滚的功能之类的功能,我认为这是对其他解决相同问题的人的权衡。
我有一个受保护的分支,只有在集成构建的集成构建通过后才应该提升/快速转发.
我目前试图通过集成构建对集成分支的拉取请求来解决这个问题,一旦成功,只需将发布分支快速转发到集成分支的顶端即可.
但是,当我在TFS构建系统上构建分支时,它将检查集成分支头部的提交,使构建服务器处于分离头状态.
这一切都应该没问题,但出于某种原因,如果不使用多个语句,我就不能这样做.对我来说,直观地说,应该有一个简单的命令.我只想将分支点快进到当前提交.
但就目前而言,我找到了两种方法:
git checkout release
git merge %HEAD_commit_id%
git branch current-head
git checkout release
git merge current-head
git branch -d current-head
上述是我能做到的"最好的"是正确的吗?我认为这个存在一条线?解决方案1和解决方案2都有其警告,所以我宁愿不同意,但我最终可能最终会使用数字2.
要重现我所拥有的确切场景,您需要2个提交(C1和C2)和2个分支(释放和集成).
点释放到C1,集成到C2,HEAD到C2(分离头状态).
最终结果应该允许我推送发布分支,现在指向与集成相同的提交.
c# ×3
api ×1
asp.net-mvc ×1
azure-devops ×1
generics ×1
git ×1
interop ×1
lambda ×1
ms-word ×1
nuget ×1
oauth ×1
styling ×1
tfs ×1
wix ×1
yamldotnet ×1