我使用"InternalsVisibleTo"属性和程序集将内部方法/类公开给我的单元测试项目.
我现在需要将该程序集安装到GAC中,因此我需要给它一个强名称.当我尝试这样做时,我在Visual Studio中收到以下错误.
强名称签名程序集必须在其InternalsVisibleTo声明中指定公钥
一点谷歌搜索带我到下面的文章:
https://msdn.microsoft.com/en-us/library/bb763089.aspx
本文指出:
"确定强名友人集会的公钥."
本文未说明如何确定公钥.我在哪里可以找到装配的公钥?此外,一旦我有公钥,这是否是声明属性的正确方法?
[assembly: InternalsVisibleTo("Namespace.Assembly.Example.Name, PublicKey=ThePublicKey")]
Run Code Online (Sandbox Code Playgroud) 我实际上开始尝试了解有关MongoDB的更多信息,但是我已经挂断了.NET等待/异步的东西.我正在尝试实现MongoDB 网站上显示的代码.我不得不稍微修改它,所以我可以让我的程序编译.我知道有以下我的控制台应用程序.
protected static IMongoClient _client;
protected static IMongoDatabase _database;
static void Main(string[] args)
{
_client = new MongoClient();
_database = _client.GetDatabase("test");
GetDataAsync();
}
private static async void GetDataAsync() //method added by me.
{
int x = await GetData();
}
private static async Task<int> GetData()
{
var collection = _database.GetCollection<BsonDocument>("restaurants");
var filter = new BsonDocument();
var count = 0;
Func<int> task = () => count; //added by me.
var result = new Task<int>(task); //added by me.
using (var cursor …Run Code Online (Sandbox Code Playgroud) 我正在尝试在Vue.js应用程序中使用嵌套路由。我有路由工作,但是我不知道如何将数据从父路由向下传递到子路由。
基本上,父路由将检索具有属性的对象。对于每个特定的嵌套子路由,我想显示该对象的属性之一。
例如,如果我有以下对象:
myDataObject : {name : "Foo" , profile : "Profile Data", posts : "Posts Data" }
Run Code Online (Sandbox Code Playgroud)
我想将“ profile”变量传递给子路由“ / user /:id / profile”。在“ / user /:id / posts”的情况下,我想传递“ post”变量。
我以为我可以使用道具来完成此操作,但是我找不到适合路由的示例,而我尝试的似乎不起作用。
这是我正在尝试做的jsfiddle的链接。
我正在尝试了解如何使用.NET Framework验证JWT令牌的签名。我正在使用https://jwt.io/上的令牌。
如果我了解这是如何工作的,则可以将HMACSHA256哈希算法与前两个令牌和一个秘密值一起使用以获取令牌的最后一部分。如果匹配,则签名有效。
https://jwt.io/页面上的示例显示了通过以下方式计算哈希值:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload), secret
)
Run Code Online (Sandbox Code Playgroud)
不幸的是,.NET Framework中的HMACSHA256对象没有这种方法。您必须传入byte []或流。也没有秘密的论点。但是,有一个构造函数以byte []作为键。为了解决这个问题,我一直在将单词“ secret”转换为byte [],以实例化HMACSHA256对象。
然后,我将base64编码的header.payload字符串转换为byte [],并将其传递给对象的ComputeHash方法HMACSHA256。
这是我遇到问题的地方。来自的输出ComputeHash是字节数组。无论我如何尝试将此byte []转换回字符串,它都永远不会与签名匹配。我不明白我要去哪里错了。令牌的签名部分是哈希值还是base64编码的哈希值?
这是我的代码:
string jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ";
string[] parts = jwt.Split(".".ToCharArray());
string headerDotPayload = string.Format("{0}.{1}", parts[0], parts[1]);
string signature = parts[2];
byte[] secret = System.Text.UTF8Encoding.UTF8.GetBytes("secret");
byte[] input = System.Text.UTF8Encoding.UTF8.GetBytes(headerDotPayload);
var alg = new HMACSHA256(secret);
byte[] hash = alg.ComputeHash(input);
//Attempting to verify
StringBuilder result = new StringBuilder();
for (int i = 0; …Run Code Online (Sandbox Code Playgroud) 与CORS战斗.我有一个网站正在为我在C#中构建的WEB API创建一个简单的XmlHttpRequest.
var xhr = new XMLHttpRequest();
xhr.open("GET","https://server/controller/method", true);
xhr.send();
Run Code Online (Sandbox Code Playgroud)
在我的web.config中,我完成了以下操作:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
Run Code Online (Sandbox Code Playgroud)
我还尝试安装Nuget包并在我的WebApiConfig.cs中执行以下操作
var cors = new EnableCorsAttribute(
origins: "*",
headers: "*",
methods: "*");
config.EnableCors(cors);
Run Code Online (Sandbox Code Playgroud)
尽管做了这些努力,CORS仍然无效.在FireFox控制台中,我收到以下错误:
跨源请求已阻止:同源策略不允许在https:// server上读取远程资源.这可以通过将资源移动到同一域或启用CORS来解决.
IE也只是失败并且没有错误.
根据我读过的所有内容,其中一个解决方案应该可以工作,但事实并非如此.是否需要在客户端JavaScript中启用/更改某些内容?在localhost上运行Visual Studio IIS Express时,CORS不起作用:PortNumber?我错过了什么?
我在MongoDB DAL类中设置了方法。
public IQueryable<MyModel> Retrieve(Expression<Func<MyModel, bool>> expression)
{
if (!BsonClassMap.IsClassMapRegistered(typeof(MyModel)))
{
DoMapping();
}
var client = new MongoClient(MongoConnectionString);
var database = client.GetDatabase("DatabaseName");
var documents = database.GetCollection<MyModel>("MyModelTable");
return documents.AsQueryable<MyModel>().Where(expression);
}
Run Code Online (Sandbox Code Playgroud)
我想做一些简单的事情
var result = Retrieve(a => a.SomeDateProperty.Date >= startDate && a.SomeDateProperty.Date <= endDate);
Run Code Online (Sandbox Code Playgroud)
但是,每次尝试时,都会显示错误消息:
MongoDB.Driver.dll中发生类型为'System.InvalidOperationException'的异常,但未在用户代码中处理
其他信息:{document} {SomeDateProperty}。不支持日期。
我正在使用官方的C#驱动程序版本2.2.4.26。
有没有办法只查询日期?我已经看过有关使用DbFunctions.Truncate的帖子,但是那是在EntityFramework库中,我希望远离。
尽管进行了多个小时的故障排除,我仍无法让 Visual Studio 向 Azure KeyVault 进行身份验证。无论我尝试什么,我都会收到以下无用的错误:
服务请求失败。状态:403(禁止)
内容:{“error”:{“code”:“禁止”,“message”:“访问第一方服务被拒绝。\r\n调用者:name=from-infra;tid=GUID_REDACTED;appid=GUID_REDACTED;iss=https ://sts.windows.net/GUID_REDACTED/\r\nVault: VAULT_NAME;location=westus","innererror":{"code":"AccessDenied"}}}
这里有什么东西(也许是一个经过编辑的 GUID 值)我可以用来确定它有问题的“第一方服务”是什么?
我在“Azure 服务身份验证”部分中使用我的 MSDN 帐户登录。KeyVault 存在于该 MSDN 帐户中。该 KeyVault 中还有针对我的 MSDN 帐户和我的应用服务主体 ID 的访问策略。当尝试进行身份验证时,这些似乎被完全忽略。
这是我一直在尝试使用的基本代码。
var credential = new VisualStudioCredential(new VisualStudioCredentialOptions { TenantId = "GUID from tid in above error" });
// Create a secret client using the DefaultAzureCredential
var client = new SecretClient(new Uri("https://MY_VAULT.vault.azure.net/"), new DefaultAzureCredential());
var secret = client.GetSecret("MySecretId");
Run Code Online (Sandbox Code Playgroud)
我尝试了多个版本的 VisualStudioCredential 和 DefaultAzureCredential。无论我做什么,我都无法摆脱这个“第一方服务被拒绝访问”错误,所以我认为下一步是找出“第一方服务”是什么,因为它似乎不是我的MSDN帐户或我的应用程序服务。
我在 Vue.js 模板中有一个项目列表。用户从“/list”开始,这是一个项目列表。单击项目时,我使用 $router.push 将用户发送到路由。我将用户发送到的路线是:
$router.push('/items/[theItemId]/Property1');
Run Code Online (Sandbox Code Playgroud)
我这样做是为了让用户不必一直在“/items/[theItemId]”上。这很好用,但是当用户点击后退按钮时,他们会被带到路线:
/items/[theItemId]
Run Code Online (Sandbox Code Playgroud)
相反,我希望将用户引导回主列表。
'/list'
Run Code Online (Sandbox Code Playgroud)
这是可能的吗?
谢谢
我过去曾使用lambdas和LINQ并制作匿名函数,但下面这行让我感到困惑.
(a,b) => new {a, b.PropertyA, b.PropertyB, b.PropertyC }
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?看起来匿名方法指向匿名类型.这将作为"resultSelector"参数传递给Join方法.
c# ×6
javascript ×3
mongodb ×2
asynchronous ×1
azure ×1
cors ×1
hash ×1
vue-router ×1
vue.js ×1