我有一个SAML断言,我希望在.Net中使用WSSecurityTokenSerializer.
尽管存在一些问题,我还是拥有了密钥链和SAML XML .
首先,我从HTTPS POST获得SAML断言:
// spec says "SAMLResponse="
string rawSamlData = Request["SAMLResponse"];
// read the base64 encoded bytes
byte[] samlData = Convert.FromBase64String(rawSamlData);
// read back into a UTF string
string samlAssertion = Encoding.UTF8.GetString(samlData);
// get the SAML data in an XML reader
var assertionPostStream = new StringReader(samlAssertion);
var reader = XmlReader.Create(assertionPostStream);
Run Code Online (Sandbox Code Playgroud)
然后我得到了我的IdP提供的密钥:
// get the key data
byte[] certificateData = System.IO.File.ReadAllBytes("myKeys.p7b");
// decode the keys
var cms = new SignedCms(SubjectIdentifierType.IssuerAndSerialNumber);
cms.Decode(certificateData);
// we have …Run Code Online (Sandbox Code Playgroud) TL; DR:如何通过杀死主进程来隔离加载项异常?
我希望有一个非常稳定的.Net应用程序,它运行的代码不太稳定AppDomain.这似乎是最初的主要目的之一AppDomain(嗯,那和安全沙箱),但它似乎不起作用.
例如AddIn.exe:
public static class Program
{
public static void Main(string[] args)
{
throw new Exception("test")
}
}
Run Code Online (Sandbox Code Playgroud)
在我的"稳定"代码中调用:
var domain = AppDomain.CreateDomain("sandbox");
domain.UnhandledException += (sender, e) => {
Console.WriteLine("\r\n ## Unhandled: " + ((Exception) e.ExceptionObject).Message);
};
domain.ExecuteAssemblyByName("AddIn.exe", "arg A", "arg B")
Run Code Online (Sandbox Code Playgroud)
将抛出的异常AppDomain直接传递给创建域的应用程序.我可以记录这些domain.UnhandledException并在包装器应用程序中捕获它们.
但是,抛出更多有问题的异常,例如:
public static class Program
{
public static void Main(string[] args)
{
Stackoverflow(1);
}
static int Stackoverflow(int x)
{
return Stackoverflow(++x);
}
}
Run Code Online (Sandbox Code Playgroud)
这将抛出stackoverflow异常,每次都会终止整个应用程序.它甚至没有开火domain.UnhandledException …
我有一个带有// @ts-check指令的 JS 文件,使用 JSDoc 注释来表示类型。
问题是元素在从document.
所以我们在 HTML 中有:
<input id="myInput">...
Run Code Online (Sandbox Code Playgroud)
当我在 JS 中获取此元素时,类型检查会引发错误:
// @ts-check
const myInput = document.getElementById('myInput');
myInput.value = 'foobar';
Run Code Online (Sandbox Code Playgroud)
“HTMLElement”类型上不存在属性“value”
如果我使用 JSDoc@type注释指定预期类型,那么也会引发错误:
// @ts-check
/** @type {HTMLInputElement} */
const myInput = document.getElementById('myInput');
myInput.value = 'foobar';
Run Code Online (Sandbox Code Playgroud)
类型“HTMLElement”不可分配给类型“HTMLInputElement”。
“HTMLElement”类型中缺少属性“accept”。
如果我在 TS 中,我可以document.getElementById('myInput') as HTMLInputElement用来告诉它我期望这种类型。
我如何在 JS 中做到这一点@ts-check?
我有一个RazorEngine项目,在升级到Razor 2.0和RazorEngine 3.2.0之后失败了
这在之前基于Razor 1.0的RazorEngine版本(3.0.8)中运行良好.
我有myInstance一个class(MyClass)的实例()和扩展方法:
namespace MyCompany.Extensions
{
public static class MyClassExtensions
{
public static string ExtensionMethod(this MyClass thing)
{
// do stuff
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想在RazorEngine视图中调用它(简化示例,有很多这些方法,并且都以相同的方式失败):
@using MyCompany.Extensions
@using MyCompany
@{
var myInstance = new MyClass(Model, ...);
}
Some text @myInstance.ExtensionMethod() some more text
Run Code Online (Sandbox Code Playgroud)
这是由RazorEngine编译的文本文件:
string parsedResult = RE::Razor.Parse(fileContent, myModel, "testfile.txt");
Run Code Online (Sandbox Code Playgroud)
问题是这条线(曾经工作过)抛出RuntimeBinderException:
'MyCompany.MyClass'不包含'ExtensionMethod'的定义
请注意,如果我将文本文件更改为:
Some text @MyClassExtensions.ExtensionMethod(myInstance) some more text
Run Code Online (Sandbox Code Playgroud)
它工作正常,所以我认为它必须找到扩展方法的命名空间.
我的第一个想法是它必须将传递的模型视为一个dynamic(因此也是从它衍生出来的任何东西dynamic),但它知道了预期的类型RuntimeBinderException.由于异常是运行时我认为在编译模板时必须无法识别扩展方法,但为什么会发生变化?
我不确定3.0.8和3.2.0之间有什么变化,或者为什么会这样.我需要添加一些东西,以便在编译模板时找到扩展方法吗?
我有一个托管的.Net类,它创建了我需要确保正确清理的非托管资源.
我有一个顺序结构:
[StructLayout(LayoutKind.Sequential)]
struct FooBar { ... }
Run Code Online (Sandbox Code Playgroud)
然后在构造函数中我有:
// Allocate the memory
var fb = new FooBar(...);
int length = Marshal.SizeOf(typeof(FooBar));
this.pointer = Marshal.AllocHGlobal(length);
Marshal.StructureToPtr(fb, this.pointer, false);
// Then I use this.pointer in extern calls
Run Code Online (Sandbox Code Playgroud)
然后在我的~Finaliser/ Dispose方法中,我使用Marshal.DestroyStructure或者Marshal.FreeHGlobal两者(如果是这样,以什么顺序)忍受我不泄漏内存?
奖金问题:
IDisposable类是否需要继承CriticalFinalizerObject以确保始终调用清理?Microsoft.Win32.SafeHandles我可以用来包装危险的非托管内存的类?我有一个.Net类,为struct使用分配非托管内存Marshal.AllocHGlobal,然后使用它来处理它Marshal.FreeHGlobal.
我理解这些类Microsoft.Win32.SafeHandles提供了处理这个的包装器,但是不清楚如何实例化它们(很多都没有构造函数) - 我应该编写抽象基类的特定实现还是有一些方法来使用它们在extern声明中?
我有一个文件夹"wwwroot",在返回静态文件时不想包含在该文件夹下。
我想返回"wwwroot"(例如"wwwroot/images")下的各种目录,这个中间件步骤可以实现:
app.UseStaticFiles();
Run Code Online (Sandbox Code Playgroud)
我可以通过它StaticFileOptions来配置返回的内容。
我想排除一个目录(例如"wwwroot/node_modules")并且不允许从中提供任何 statif 文件。
似乎没有我可以使用的过滤器StaticFileOptions- 我应该如何应用该过滤器?
我有一个 .NET 核心依赖项,其范围仅限于每个 REST API 请求。它是Startup.ConfigureServices通过调用添加的AddScoped。
我想为此添加取消支持。如果我将 a 添加CancellationToken cancellationToken到任何控制器操作的参数中,我可以获得一个在客户端请求被取消时被取消的令牌。然后我可以将该令牌传递给我的依赖项上的所有方法。
但是,依赖关系的范围仅限于请求,因此通过操作将令牌传递给方法感觉没有必要 - 我可以以CancellationToken某种方式将其添加到范围依赖关系中吗?
c# dependency-injection request-cancelling .net-core asp.net-core
我有一个使用大量依赖注入的 ASP.NET Core 项目。
问题是这些开始堆积在我的控制器动作上:
public async Task LoginAsync(
[FromBody] LoginModel login,
[FromServices] IConnectionMultiplexer redis,
[FromServices] ISerialiserFactory serialiser,
[FromServices] IDataService dataService,
[FromServices] ILookupNormalizer normaliser,
[FromServices] IPasswordHasher hasher,
...
Run Code Online (Sandbox Code Playgroud)
我可以将它们放在构造函数中,但大多数方法不使用它们,而那些使用它们的方法并不总是使用所有这些。
我可以直接实例化它们,但是我失去了在启动时注入它们的能力。
有没有更简单的方法来获得这些注入的服务?理想情况下,我想调用类似的东西:
// It turns out I need the injected serialiser
var serialiser = services.Get<ISerialiserFactory>();
Run Code Online (Sandbox Code Playgroud)
有没有办法在 ASP.NET Core 中做到这一点?
我有一个依赖注入ILoggerFactory,它ILogger在 .NET Core 2.1 应用程序中生成 。
我想记录这样的内容:
\n\nlogger.LogInformation("Magic Char {MagicChar}", "\xce\xbb")\nRun Code Online (Sandbox Code Playgroud)\n\n问题是实际记录的是:
\n\ninfo <myClass>\n Magic Char ?`\nRun Code Online (Sandbox Code Playgroud)\n\n如何使用 .NET 的内置记录器记录 unicode 字符?
\n我有一个简单的 TypeScript tsconfig.json:
{
"compilerOptions": {
"target": "esnext",
"experimentalDecorators": true,
...
Run Code Online (Sandbox Code Playgroud)
以及一个使用装饰器的类:
class MyClass {
@myDecorator()
myField: any;
}
Run Code Online (Sandbox Code Playgroud)
装饰器导致myField作为使用函数的属性发出__decorate,该myDecorator函数被传递给它。
升级到最新版本 (4.2.4) 后,它在 Visual Studio 2019 中停止工作,但它继续在 VS Code(使用 4.3.5)和持续集成工具(在 4.3.5 和较旧的 3.* TypeScript 版本中)中工作)。
经过一番调查后发现,发出的 JavaScript 已更改为显式包含这些字段,但仅限于 Visual Studio 2019 中嵌入的 TypeScript 4.2.4。这些显式字段导致__decorate无法创建同名的新属性。
为什么发出的 JS 发生了变化?
我如何解决它?
javascript visual-studio typescript tsconfig typescript-decorator
.net ×4
asp.net-core ×3
c# ×3
.net-core ×2
javascript ×2
marshalling ×2
typescript ×2
appdomain ×1
dispose ×1
finalizer ×1
jsdoc ×1
logging ×1
pkcs#7 ×1
razor ×1
razor-2 ×1
saml-2.0 ×1
static-files ×1
ts-check ×1
tsconfig ×1
unmanaged ×1
winapi ×1