使用新的ASP.NET Web API测试版.我似乎无法获得建议的用户身份验证方法.建议的方法似乎是,将[Authorize]过滤器添加到API控制器.例如:
[Authorize]
public IEnumerable<Item> Get()
{
return itemsService.GetItems();
}
Run Code Online (Sandbox Code Playgroud)
但这并不像预期的那样有效.请求资源时,您将被重定向到登录表单.哪个不适合RESTful webapi.
我该怎么办呢?它在未来的版本中会有不同的工作吗?或者我应该回到实现我自己的动作过滤器?
设计RESTful API.我有两种识别资源的方法(人员数据).通过数据库生成的唯一ID或通过社会安全号码(SSN)为每个人输入.SSN应该是唯一的,但可以改变.
使用ID对我来说最方便,因为它保证是唯一的,并且不会改变.因此,资源的URL也始终保持不变:
GET /persons/12
{
"name": Morgan
"ssn": "840212-3312"
}
Run Code Online (Sandbox Code Playgroud)
使用SSN的理由是API客户端提供更多信息和理解.SSN在周围系统中的使用更多:
GET /persons/840212-3321
{
"name": Morgan
"id": "12"
}
Run Code Online (Sandbox Code Playgroud)
所以问题是:我应该采用第一种方法,并避免一些SSN可能发生变化的实施难题.也许提供一些从SSN转换为ID的辅助方法?
或者采用第二种方法.提供更丰富的API.虽然不得不处理一些不那么REST的陌生感,其中URL:s可能因SSN更改而改变?
由于OpenGL中使用几何着色器的分层渲染在某些驱动程序/硬件上看起来有些狡猾,我想用自己的解决方案替换该功能.这通过使用大纹理作为rendertarget,例如分辨率为300².然后通过渲染到纹理中的100²块来模拟分层渲染.使用该分辨率,将产生9个图块/图层,如下面的模型所示:

问题是; 如何使用OpenGL?假设借助于几何着色器,可以在一次通过中将场景渲染到不同的切片.
使用Perl Web应用程序框架Dancer,我在URL匹配中使用尾部斜杠存在一些问题.
比方说,我希望匹配以下URL,并带有可选的Id参数:
get '/users/:id?' => sub
{
#Do something
}
Run Code Online (Sandbox Code Playgroud)
双方/users/morgan和/users/比赛.虽然/users不会.哪个看起来不太均匀.因为我更喜欢,只匹配URL:s而没有斜杠:
/users/morgan和/users.我怎么做到这一点?
我倾向于将OpenGL对象包装在自己的类中.在OpenGL中有绑定的概念,你绑定你的对象,用它做一些事情,然后取消绑定它.例如,纹理:
glBindTexture(GL_TEXTURE_2D, TextureColorbufferName);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 1000);
glBindTexture(GL_TEXTURE_2D, 0);
Run Code Online (Sandbox Code Playgroud)
包装这将是这样的:
texture->bind();
texture->setParameter(...);
texture->setParameter(...);
texture->unBind();
Run Code Online (Sandbox Code Playgroud)
这里的问题是,我想避免使用bind()和unBind()函数,而只是能够调用set方法,GLObject将自动绑定.
我可以在每个方法实现中做到这一点:
public void Texture::setParameter(...)
{
this.bind();
// do something
this.unBind();
}
Run Code Online (Sandbox Code Playgroud)
虽然我必须为每一个添加的方法做到这一点!有没有更好的方法,所以它是在每个方法添加之前和之后自动完成的?
我有以下代码,表示3D应用程序中的网格(为清晰起见,省略了一些代码):
class Mesh {
public:
typedef std::vector<Vertex> Vertices;
typedef std::vector<int> Elements;
template<class VerticesIt, class ElementsIt>
Mesh(const VerticesIt verticesBegin,
const VerticesIt verticesEnd,
const ElementsIt elementsBegin,
const ElementsIt elementsEnd) :
vertices_(verticesBegin, verticesEnd),
elements_(elementsBegin, elementsEnd) {
}
virtual ~Mesh();
typename Vertices::const_iterator verticesBegin() const {
return vertices_.begin();
};
typename Vertices::const_iterator verticesEnd() const {
return vertices_.end();
};
typename Elements::const_iterator elementsBegin() const {
return elements_.begin();
};
typename Elements::const_iterator elementsEnd() const {
return elements_.end();
};
private:
Vertices vertices_;
Elements elements_;
};
Run Code Online (Sandbox Code Playgroud)
它工作得非常好,为内部数据提供了清晰的界面.没有为容器公开实现细节.
我对此有一点打嗝.我不能使用基于范围的循环,必须使用迭代器:
for (auto it = …Run Code Online (Sandbox Code Playgroud) 在我的MVC 3 .net应用程序中,我有两个区域,一个叫Admin,另一个叫Student.我使用内置的会员系统进行用户身份验证,并在两个区域之间进行统一.问题是,我想使用区域特定的登录页面,因为这两个区域在设计上有很多不同(学生针对的是移动设备).据我所知,我只能在Web.config中为应用程序指定一个登录页面,如下所示:
<authentication mode="Forms">
<forms loginUrl="~/Admin/Account/LogOn" timeout="2880" />
</authentication>`
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我如何为同一会员系统实现多个登录页面?