我有一个.NET的Uri实现的问题.似乎如果方案是"ftp",则查询部分不会被解析为Query,而是作为路径的一部分进行解析.
以下面的代码为例:
Uri testuri = new Uri("ftp://user:pass@localhost/?passive=true");
Console.WriteLine(testuri.Query); // Outputs an empty string
Console.WriteLine(testuri.AbsolutePath); // Outputs "/%3Fpassive=true"
Run Code Online (Sandbox Code Playgroud)
在我看来,Uri类错误地将查询部分解析为路径的一部分.但是将方案更改为http,结果如预期:
Uri testuri = new Uri("http://user:pass@localhost/?passive=true");
Console.WriteLine(testuri.Query); // Outputs "?passive=true"
Console.WriteLine(testuri.AbsolutePath); // Outputs "/"
Run Code Online (Sandbox Code Playgroud)
有没有人有这个解决方案,或知道一个按预期工作的替代Uri类?
我正在尝试为C API(本机Win dll)编写一个C#P/Invoke包装器,通常这样可以正常工作.唯一的例外是将结构作为C代码中的参数的特定方法.在没有任何异常的情况下调用该函数,但它返回false,表示执行失败.
在API头文件中,涉及的方法和结构定义如下:
#define MAX_ICE_MS_TRACK_LENGTH 256
typedef struct tagTRACKDATA
{
UINT nLength;
BYTE TrackData[MAX_ICE_MS_TRACK_LENGTH];
} TRACKDATA, FAR* LPTRACKDATA;
typedef const LPTRACKDATA LPCTRACKDATA;
BOOL ICEAPI EncodeMagstripe(HDC /*hDC*/,
LPCTRACKDATA /*pTrack1*/,
LPCTRACKDATA /*pTrack2*/,
LPCTRACKDATA /*pTrack3*/,
LPCTRACKDATA /*reserved*/);
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下代码创建C#P/Invoke包装器:
public const int MAX_ICE_MS_TRACK_LENGTH = 256;
[StructLayout(LayoutKind.Sequential)]
public class MSTrackData {
public UInt32 nLength;
public readonly Byte[] TrackData = new byte[MAX_ICE_MS_TRACK_LENGTH];
}
[DllImport("ICE_API.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool EncodeMagstripe(IntPtr hDC,
[In]ref MSTrackData pTrack1,
[In]ref MSTrackData pTrack2,
[In]ref MSTrackData pTrack3, …
Run Code Online (Sandbox Code Playgroud) 我正在研究需要解密PKCS#7加密数据的解决方案,最好是在C#中.据我所知,.NET api通过System.Security.Cryptography.Pkcs命名空间支持这一点.但是,似乎实现只能在字节数组上工作.那么当我有一个不适合内存的大型加密文件时,我该怎么办?
我在这里遗漏了什么,或者是否有另一种方法在Stream级别而不是使用bytearrays?