小编Aid*_*api的帖子

RESTful HTTP API中的授权,401 WWW-Authenticate

我正在创建一个RESTful服务来为Web应用程序提供数据.我有两个相关的问题.

1.如何处理未经授权的请求?

我打算用以下代码回复请求:

  • 资源是否打开并找到?200好的
  • 您是否需要通过身份验证才能访问资源?401未经授权
  • 您是否可以访问某类资源?403禁止
  • 您是否可以访问某类资源,但不能访问此特定资源?404 Not Found阻止人们了解他们无法访问的资源的存在.
  • 资源不存在吗?404未找到

这是RESTful服务的推荐方式吗?

2. WWW-Authenticate401响应应该提供什么标题?

我在维基百科上阅读(可能不是最准确的资源,但它对我有用)401响应必须包含一个WWW-Authenticate标题,但是在进一步搜索时我找不到任何资源说明这个值意味着什么以及它应该是什么.

我找到了几个有关此标题的SO问题和论坛主题,它们似乎都是关于OAuth的,建议不要使用401状态代码或者说你可以做些什么.

此标头应包含的正确值是什么?

rest http xmlhttprequest http-status-codes http-status-code-401

37
推荐指数
1
解决办法
3万
查看次数

如何编译单个Java文件

我搜索了这个,但我无法找到或理解我发现的东西.
现在我不是Java程序员,但是我需要将一个Java文件编译成现有的(已编译的)Java程序.我无法使用此Java代码的源代码,因此无法编译整个项目.
我对反编译原始项目不感兴趣.

如何使用JDK和javac快速完成此操作?(通过命令行是我更喜欢的.)

我知道要这样做,必须禁用单个java文件之外的错误检查,因为它无法读取依赖项.

在此先感谢,
-Aidiakapi

编辑:我有JAR文件,谢谢你的答案:)

java compilation

29
推荐指数
2
解决办法
3万
查看次数

这(挥发性bool)总是线程安全吗?

我想知道这是否完全是线程安全的,以及volatile关键字是否应该到位.

using System.Threading;

class Program
{
    private static volatile bool _restart = true;

    private static void Main()
    {
        while (_restart)
        {
            // Do stuff here every time for as long as _restart is true
            Thread.Sleep(1);
        }
    }

    private static void SomeOtherThread()
    {
        Thread.Sleep(1000);
        _restart = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为是,但我想仔细检查,因为我不是100%肯定我只是想确定.

我认为volatile关键字是必需的,因为它永远不可能将值缓存在寄存器或类似的优化中.

c# volatile thread-safety

22
推荐指数
2
解决办法
1万
查看次数

Null合并运算符的含义?

前一阵子我编译了两个版本的代码,一个使用(Nullable<T>)x.GetValueOrDefault(y),一个使用(Nullable<T>)x ?? y).

在反编译为IL之后,我注意到null coalesce运算符被转换为GetValueOrDefault调用.

因为它是一个方法调用,在执行该方法之前可以传递一个表达式,所以y似乎总是执行.

例如:

using System;

public static class TestClass
{
    private class SomeDisposable : IDisposable
    {
        public SomeDisposable()
        {
            // Allocate some native resources
        }

        private void finalize()
        {
            // Free those resources
        }

        ~SomeDisposable()
        {
            finalize();
        }

        public void Dispose()
        {
            finalize();
            GC.SuppressFinalize(this);
        }
    }

    private struct TestStruct
    {
        public readonly SomeDisposable _someDisposable;
        private readonly int _weirdNumber;

        public TestStruct(int weirdNumber)
        {
            _weirdNumber = weirdNumber;
            _someDisposable = new …
Run Code Online (Sandbox Code Playgroud)

c# nullable

8
推荐指数
1
解决办法
1287
查看次数

读取字节[]的最快(可能是不安全)方式是什么?

我正在使用C#中的服务器项目,收到TCP消息后,它会被解析,并以精确大小的byte []存储.(不是固定长度的缓冲区,而是存储所有数据的绝对长度的byte [].)

现在读取这个字节[]我将创建一些包装器函数(也用于兼容性),这些是我需要的所有函数的签名:

public byte ReadByte();
public sbyte ReadSByte();
public short ReadShort();
public ushort ReadUShort();
public int ReadInt();
public uint ReadUInt();
public float ReadFloat();
public double ReadDouble();
public string ReadChars(int length);
public string ReadString();
Run Code Online (Sandbox Code Playgroud)

字符串是一个\ 0终止的字符串,可能用ASCII或UTF-8编码,但我无法确定,因为我不是在编写客户端.

数据存在:

byte[] _data;
int _offset;
Run Code Online (Sandbox Code Playgroud)

现在我可以手动编写所有这些函数,如下所示:

public byte ReadByte()
{
    return _data[_offset++];
}

public sbyte ReadSByte()
{
    byte r = _data[_offset++];
    if (r >= 128) return (sbyte)(r - 256);
    else return (sbyte)r;
}

public short ReadShort()
{
    byte b1 = _data[_offset++];
    byte b2 …
Run Code Online (Sandbox Code Playgroud)

c# multithreading buffer

7
推荐指数
2
解决办法
1225
查看次数

char []创建不安全的字符串

我正在研究一种高性能代码,其中该构造是性能关键部分的一部分.

这是在某些部分中发生的情况:

  1. A string被"扫描"并且元数据被有效存储.
  2. 基于此元数据,主字符串的块被分成一个char[][].
  3. char[][]应该转移到string[].

现在,我知道你可以打电话,new string(char[])但结果必须复制.

为了避免发生这种额外的复制步骤,我想我必须可以直接写入字符串的内部缓冲区.即使这将是一个不安全的操作(我知道这带来了许多影响,如溢出,向前兼容).

我已经看到了实现这一目标的几种方法,但没有一种我真的很满意.

有没有人有关于如何实现这一目标的真实建议?

额外信息:
实际过程不包括转换为char[]必然,它实际上是一个"多子串"操作.像3个索引和它们的长度附加.

StringBuilder有少数concats的开销太大.

编辑:
由于我要求的一些模糊的方面,让我重新拟定它.

这是发生的事情:

  1. 主字符串已编入索引.
  2. 主字符串的一部分被复制到一个char[].
  3. char[]被转换为一个string.

我想做的是合并第2步和第3步,结果是:

  1. 主字符串已编入索引.
  2. 主字符串的一部分被复制到一个string(并且GC在过程中可以通过正确使用fixed关键字来保持它的手离开?).

需要注意的是,我无法从string []更改输出类型,因为这是一个外部库,项目依赖于它(向后兼容性).

c# string performance unsafe

7
推荐指数
1
解决办法
1124
查看次数

如何围绕控制台应用程序创建 C# 包装器(任何语言)

我正在尝试制作一个控制台应用程序,它可以包含几乎任何打开控制台的应用程序。

一些简单的事实:

  • 包装应用程序的输出应显示在控制台中。
  • 包装器控制台的输入也应该是包装控制台应用程序的输入。
  • 您必须能够使用代码来插入命令。

这是我到目前为止所拥有的,除了最后几行之外,一切正常:

ProcessStartInfo startInfo = new ProcessStartInfo("someBatchThingy.cmd");

startInfo.WorkingDirectory = Environment.CurrentDirectory;
startInfo.UseShellExecute = false;

Process process = new Process();
process.StartInfo = startInfo;

process.Start();

Thread.Sleep(5000);

Stream s = Console.OpenStandardOutput();
byte[] stopCommand = new byte[] { 115, 116, 111, 112, 13 };
s.Write(stopCommand, 0, stopCommand.Length);

process.WaitForExit();
Run Code Online (Sandbox Code Playgroud)

因为性能非常重要,所以我真的想重新分配到进程输出的位置,而不是手动将数据从隐藏控制台传输到包装器控制台。

有谁知道如何做到这一点/如果可能的话?

c# io console-application

5
推荐指数
1
解决办法
7343
查看次数

Lua模式括号和0或1次出现

我正在尝试将字符串与模式匹配,但有一件事我还没弄清楚.在正则表达式中我会这样做:

Strings:
en
eng
engl
engli
englis
english

Pattern:
^en(g(l(i(s(h?)?)?)?)?)?$
Run Code Online (Sandbox Code Playgroud)

我希望所有的字符串都匹配.在Lua模式匹配中,我无法使其工作.

即使是这样一个更简单的例子也行不通:

Strings:
fly
flying

Pattern:
^fly(ing)?$
Run Code Online (Sandbox Code Playgroud)

有人知道怎么做这个吗?

regex lua lua-patterns

5
推荐指数
1
解决办法
1085
查看次数

阻止const类函数在引用成员上调用非const类函数

请原谅我这个相当模糊的标题,但它确实有点说出来.这就是我的意思

class A
{
    void DoSomething(); // non-const
}
Class B
{
public:
    B(A& a) : _a(a) { }
    // const function
    void DoSomethingElse() const
    {
        // Is there a way to disallow this?
        _a.DoSomething();
    }
    void DoEvenMore()
    {
        // Should be OK
        _a.DoSomething();
    }
private:
    // Can't make it const A& because it needs
    // be non-const for non-const functions
    A& _a; // A reference
}
Run Code Online (Sandbox Code Playgroud)

那么有什么方法可以防止B::DoSomethingElse()打电话A::DoSomething()
但是,B::DoEventMore()哪个不const应该继续通话.

我正在使用Visual C++ 2013. …

c++ const-correctness visual-c++ c++11

5
推荐指数
2
解决办法
227
查看次数

转换'编译时'类型的最快方法是什么?

我知道标题有点模糊.但我想要实现的是这样的:

在抽象类中:

public abstract bool TryGet<T>(string input, out T output) where T : struct;
Run Code Online (Sandbox Code Playgroud)

在具有此签名的类中:

private class Param<T> : AbstractParam where T : struct
Run Code Online (Sandbox Code Playgroud)

这个实现:

public override bool TryGetVal<TOriginal>(string input, out TOriginal output)
{
    T oTemp;
    bool res = _func(input, out oTemp); // _func is the actual function
                                        // that retrieves the value.
    output = (TOriginal)oTemp; // Compile-time error
    return res;
}
Run Code Online (Sandbox Code Playgroud)

而且TOriginal将永远是相同的类型T.这会绕过编译时错误,但我不想这样做会导致性能下降:

output = (TOriginal)(object)oTemp;
Run Code Online (Sandbox Code Playgroud)

如果它是引用类型,这将提供解决方案:

output = oTemp as TOriginal;
Run Code Online (Sandbox Code Playgroud)

反射/动态也可以解决问题,但性能影响更大:

output = …
Run Code Online (Sandbox Code Playgroud)

c# performance casting unsafe

3
推荐指数
1
解决办法
285
查看次数

使用.NET 3.5调用多个表达式

替代方案

虽然我(并且对于这个项目仍然是)仅限于.NET 3.5,但我已经成功使用了表达树的DLR版本.哪个是在Apache License 2.0版下发布的.

这增加了对所有(可能是一些或多或少,但可能不是).NET 4.0+表达式的支持,例如BlockExpression我对此问题所需的表达式.

源代码可以在GitHub上找到.


原始问题

在我当前的项目中,我正在使用可变数量的参数编译表达式树.我有一个Expressions需要调用的链.在.NET 4.0+中,我只是Expression.Block用来实现这一点,但是,我只能在这个项目中使用.NET 3.5.

现在我已经找到了解决这个问题的大规模黑客攻击,但我不相信这是解决这个问题的最好方法.

代码:

using System;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;

class Program
{
    struct Complex
    {
        public float Real;
        public float Imaginary;
    }

    // Passed to all processing functions
    class ProcessContext
    {
        public ConsoleColor CurrentColor;
    }

    // Process functions. Write to console as example.
    static void processString(ProcessContext ctx, string s)
    { Console.ForegroundColor = ctx.CurrentColor; Console.WriteLine("String: " + s); }
    static void processAltString(ProcessContext …
Run Code Online (Sandbox Code Playgroud)

c# performance lambda expression-trees

3
推荐指数
1
解决办法
697
查看次数

ReadOnlyCollection <T>必须是不可变的

我正在设计一些接口来ReadOnlyCollection<T>表示这些接口的使用者只能从集合中读取.

然而,提供的集合不是一成不变的,并且会不时变化,我想知道我的设计是否错误.一个孩子应该ReadOnlyCollection<T>是一成不变的吗?

c# architecture readonly immutability

1
推荐指数
1
解决办法
340
查看次数

如何使用命令提示符安排任务?

我想知道如何使用命令提示符安排任务.现在我知道你可以在网上找到这个,但我还没找到我一直在找的东西.

问题是我必须使用的操作系统是瑞典语(瑞典语的Windows Server 2003).

它需要运行位于"C:\ Documents and Setting \Administratör\ Skrivbord\Midnight.exe"的程序.

它应该每天午夜左右运行.

有人知道如何在cmd中安排这个吗?
我确实拥有管理员权限,因此权限不应成为问题.

windows scheduled-tasks windows-server-2003

0
推荐指数
1
解决办法
5775
查看次数