请考虑以下(常见)方案.我将首先尝试使用OAuth指定我对(漂亮的)Web API的理解.如果我有任何错误的流程,请纠正我.
我的API:关注的焦点,所有客户都使用它.
我的Web应用程序:就像任何其他客户端一样使用API.
我的移动应用程序:也使用API,与Web应用程序完全相同.用户应该能够在不打开浏览器的情况下进行身份验证.
第三方Web App:也使用API - 但是,用户/资源所有者必须授予应用程序执行某些操作的权限.他们通过重定向到我的站点(或打开一个弹出窗口),在必要时记录用户,并提示用户进行访问来完成此操作.
第三方移动应用程序:与第三方Web应用程序相同的要求.
这是我理解的,并且到目前为止都会这样做.这是我真正需要帮助的地方 - 正确完成这项工作.
官方网络应用
- Client attempts to `GET /api/tasks/".
- API says "who are you? (HTTP 401)
- Official web app redirects to login form.
> Bob enters his credentials.
- .. now what? Get an authentication token? Cookie?
Run Code Online (Sandbox Code Playgroud)
我主要使用.NET(C#),但我喜欢一种适用于基于Node JS的API的方法.
你会怎么做?特别是客户流程对我来说是一个问题.我问的原因是,我已经知道除非绝对必要,否则你不应该推出自己的安全解决方案,所以如果有任何标准的准则,请告诉我.:)
我有一个字符串,让我们调用它MyStr.我试图摆脱字符串中的每个非字母字符.就像在IM中像MSN和Skype一样,人们将他们的显示名称设置为[-Bobby-].我想删除该字符串中不是字母字符的所有内容,所以我留下的就是"名称".
我怎么能在Delphi中做到这一点?我正在考虑创建一个TStringlist并在那里存储每个有效字符,然后IndexOf用来检查char是否有效,但我希望有一个更简单的方法.
所以我一直在搞乱创建自己独立的数据结构.我终于让它工作了,但后来我发现与旧方法相比,内存使用率高得离谱.
为了测试这个,我创建了相同的测试应用程序,但我会将数据存储在我的PVirtualNodes中.
当添加1000个根,每个1000个子节点时,单独的数据结构使用大约208 MB,而PVirtualNode只使用大约160 MB,并且它也快一点.
我认为使用单独的数据结构应该使用更少的内存,并且更快,但我想这是代价?
以下是"在PVirtualNode中存储数据"的来源:http://pastebin.com/j6L2eHJt
以下是"在单独数据结构中存储数据"的来源:http://pastebin.com/iSwR0hW1
我有一些C代码,我尝试使用C#.大部分转换都已完成.我有几个问题.
"C"代码的一部分看起来像这样.
typedef struct r_GetCPL {
UInt8 Storage;
UInt8 Key[16]; //(1)
UInt8 *Buff; //(2)
Array16 *CryptoKeyIDs; //(3)
} REPLY_GETCPL;
Run Code Online (Sandbox Code Playgroud)
在'C'中定义的别名
typedef unsigned char UInt8;
typedef unsigned short UInt16;
typedef unsigned long UInt32;
typedef unsigned long long UInt64;
typedef UInt8 Array8[8];
typedef UInt8 Array16[16];
typedef UInt8 Array32[32];
typedef UInt8 Array64[64];
typedef UInt8 Array128[128];
Run Code Online (Sandbox Code Playgroud)
我假设我可以用直接结构定义替换typedef.这样好吗?我定义的等效C#结构是,
public struct REPLY_GETCPL
{
Byte Storage;
Byte[16] Key; //(1) Is this right?
UInt8 *Buff; //(2) What is the equivalent?
Array16 *CryptoKeyIDs; //(3) What is the equivalent?
} …Run Code Online (Sandbox Code Playgroud) 嘿SO!我在StackOverflow.com上发布了Stack Overflow问题.讽刺最好!
无论如何.我在我的SkypeReply事件处理程序上调用此过程,该事件被解雇了很多:
Procedure OnCategoryRename;
Var
CategoryID : Integer;
sCtgName : String;
Begin
if (AnsiContainsStr(pCommand.Reply,'GROUP')) and (AnsiContainsStr(pCommand.Reply,'DISPLAYNAME')) then
begin
sCtgName := pCommand.Reply;
Delete(sCtgName,1,Pos('GROUP',sCtgName)+5);
CategoryID := StrToInt(Trim(LeftStr(sCtgName,Pos(' ',sCtgName))));
sCtgName := GetCategoryByID(CategoryID).DisplayName; // Removing THIS line does not produce a Stack Overflow!
ShowMessage(sCtgName);
end;
Run Code Online (Sandbox Code Playgroud)
这样做的想法是通过我的Skype群组列表循环,以查看已重命名的群组.AFAIK并不重要,因为我的SO已被追溯到此处出现
Function GetCategoryByID(ID : Integer):IGroup;
Var
I : Integer;
Category : IGroup;
Begin
// Make the default result nil
Result := nil;
// Loop thru the CUSTOM CATEGORIES of the ONLY SKYPE CONTROL used in this …Run Code Online (Sandbox Code Playgroud) 我有一个包含代码的textarea.问题是,为了使它看起来不错,Textarea必须停止包装文本,而是使用水平滚动条.
我试过这个:
textarea
{
overflow: scroll;
overflow-y: scroll;
overflow-x: scroll;
overflow:-moz-scrollbars-horizontal;
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
textarea
{
overflow: auto;
overflow-y: scroll;
overflow-x: scroll;
overflow:-moz-scrollbars-horizontal;
}
Run Code Online (Sandbox Code Playgroud)
但是水平滚动条没有应用.
这样做的正确方法是什么?
当我看到这段代码时,我想知道一点:
// Get the screen height and width
var maskHeight = $(document).height();
var maskWidth = $(window).width();
...
// Get the window height and width
var winH = $(window).height();
var winW = $(window).width();
Run Code Online (Sandbox Code Playgroud)
$(document).height();和之间有什么区别$(window).height();?
我的PHP脚本在从我的Delphi桌面客户端发出POST请求调用之后输出.sql文件的内容.
以下是发生的事情:
mysqldump并生成一个文件 -xdb_backup.sqlinclude "xdb_backup.sql";将打印并将其返回到桌面客户端,然后删除SQL文件.问题是,SQL文件的大小可能会有所不同(为了测试,我生成了一个6 MB的文件).我希望我的桌面客户端能够显示进度,但是PHP脚本没有公开它的大小,所以我没有Progressbar.Max分配值.
如何让我的PHP脚本让客户知道它有多大before the whole thing is over?
注意:下载SQL文件不是一个选项,因为脚本必须销毁它.:)
我创建了一个派生自TThread的类,因为我希望做一些异步的东西,但为了避免创建另一个类,我在该线程类周围构建了整个东西.不确定这是不是很好的做法,如果我不能让它工作,那么我想我别无选择,只能重新编码..
问题:我在FormCreate上创建Thread,分配一些属性,然后在FormDestroy上释放它.在Thread的构造函数中,我设置了FreeOnTerminate = False.当我点击表格上的一个按钮时,我Start();就是线程.好的,所以它按预期运行,发生错误(预期!),它被传递给我的错误处理事件,它似乎终止.然后我再次单击该按钮,我收到Cannot call Start on a running or suspended thread错误.
如何在不释放线程的情况下完成线程,并让我重新启动它?
我试图"挑选"我要序列化的特定类型的集合中的哪些对象.
示例设置:
public class Person
{
public string Name { get; set; }
public List<Course> Courses { get; set; }
}
public class Course
{
...
public bool ShouldSerialize { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我需要能够排除Person.Courses集合中ShouldSerialize为false的所有课程.这需要在ContractResolver中完成 - ShouldSerialize属性就是一个例子,在我的实际场景中可能还有其他标准.我不想创建一个ShouldSerializeCourse(如这里指定的那样:http://james.newtonking.com/json/help/index.html?topic = html/ConditionsProperties.htm )
我似乎无法找出在ContractResolver中覆盖哪个方法.我该怎么做?