我用MVC4创建了我的第一个超级小型webapp.到目前为止,我使用布局的东西来布局webapp并添加了一些视图控制器和一个模型来注册并允许用户登录.
用户登录/注册后,我将其用户名存储在会话中.我从会话中读取此属性以确定用户是否已登录.
这是一种不好的做法吗?我读了很多关于RESTful和无状态webapps的内容.我觉得我不应该在会话中保存任何东西.
例如
@if (string.IsNullOrEmpty(Session["User"] as string))
{
<dl>
<dt><a href="/Account/Register">Register</a></dt>
<dt><a href="/Account/Login">Login</a></dt>
</dl>
}
else
{
<dl>
<dt><a href="/Account/ShowAccount/@Session["User"]">@Session["User"]</a></dt>
<dt><a href="/Account/Logout">Log out</a></dt>
</dl>
}
Run Code Online (Sandbox Code Playgroud)
Q1:这是一个不好的做法吗?
Q2:这是"黑客安全"吗?这样,是否容易破解当前会话并在Session ["User"]中存储值以绕过登录?
在另一篇文章中,我要求澄清何时使用DbSet<TEntity>.Local. 我还没有得到答案,我认为这个问题可能包含太多信息。深入挖掘后,我可以提出一个更具体的问题。
希望你们能够解释在我的场景中选择两个选项中的哪一个。
我正在尝试从我的Repository. 这些实体仍处于“已添加”状态(即我尚未调用该SaveChanges方法)。我需要这个,因为我想将实体存储在一个原子操作中,所以我必须推迟调用,SaveChanges直到验证完整的模型之后。
此外,我需要符合 IQueryable 接口,因为我有使用扩展方法来延迟加载导航属性的依赖Include代码Queryable。
过去几天发生了很多事情,但归结为以下两种不同的方法:
DbSet<TEntity>.Local通过属性DbContext.ChangeTracker public void AddAndRetrieveUncommittedEntityFromDbContext()
{
Database.SetInitializer(new DropCreateDatabaseAlways<TestContext>());
var testContext = new TestContext();
// Initialize the entities and store them in the repository
var tenant = new Tenant { Name = "test", Guid = Guid.NewGuid().ToString() };
var user = new User { Name = "bas", EmailAddress = "bas@domain.com", Password = …Run Code Online (Sandbox Code Playgroud) 为什么在这部分代码中complete被缓存?
static void Main()
{
bool complete = false;
var t = new Thread (() =>
{
bool toggle = false;
while (!complete) toggle = !toggle;
});
t.Start();
Thread.Sleep (1000);
complete = true;
t.Join(); // Blocks indefinitely
}
Run Code Online (Sandbox Code Playgroud)
但在这部分不是吗?
static void Main()
{
bool complete = false;
bool toggle = false;
var t = new Thread (() =>
{
while (!complete) toggle = !toggle;
});
t.Start();
Thread.Sleep (1000);
complete = true;
t.Join();
}
Run Code Online (Sandbox Code Playgroud) 让ProgressBar正常工作我遇到了麻烦.
XAML:
<ProgressBar x:Name="ProgressBar" Value="{Binding Progress, UpdateSourceTrigger=PropertyChanged}" HorizontalAlignment="Left" Height="37" Margin="10,35,0,0" VerticalAlignment="Top" Width="590"/>
Run Code Online (Sandbox Code Playgroud)
代码背后:
ProgressBar.DataContext = progressModel;
Run Code Online (Sandbox Code Playgroud)
IProgressModel:
public interface IProgressModel
{
double Minimum { get; set; }
double Maximum { get; set; }
double Progress { get; }
}
Run Code Online (Sandbox Code Playgroud)
执行:
private void WorkerOnDoWork(object sender, DoWorkEventArgs doWorkEventArgs)
{
Minimum = 0;
Maximum = RenamableFiles.Count;
var i = 0;
foreach (var renamableFile in RenamableFiles)
{
var oldFilename = ReCreateOldFileName(renamableFile);
var renameProposalFilename = CreateNewFileName(renamableFile);
if (oldFilename != null && renameProposalFilename != null && …Run Code Online (Sandbox Code Playgroud) 我正在编写启动我的 WPF 应用程序的验收测试,如下所示:
[TestCase("279")]
[TestCase("281")]
[TestCase("289")]
public void StartAndInitializeSystemControl(string machineNumber)
{
application = new App();
systemControl = new SystemControl(application, machineNumber);
application.Dispatcher.BeginInvoke(DispatcherPriority.Loaded, new Action(() => ApplicationOnActivated(null, null)));
application.Run();
Assert.Pass();
}
Run Code Online (Sandbox Code Playgroud)
我省略了不相关的部分。我在上面的代码中做的是启动 WPF App,启动应用程序并Application.Run()执行某些内容并验证某些内容。一切都很好,工作正常。当我开始添加测试用例时,事情开始向南。当我添加测试用例时,我为每个 AppDomain 启动了多个 WPF 应用程序,这是不允许的。
System.InvalidOperationException:无法在同一个 AppDomain 中创建多个 System.Windows.Application 实例。
我该如何解决这个问题?我可以从 AppDomain 中“清除”启动的应用程序吗?我可以为我开始的每个测试启动不同的 AppDomain 吗?
是否存在高分辨率计时器,每次计时器过去时都会引发事件,就像System.Timer课程一样?Elapse每隔ms 我需要一个高分辨率计时器.
我一直在发帖说明秒表可以测量高分辨率,但我不想测量时间,我想创建一个1毫秒的间隔.
在.NET中有什么东西,还是我要编写自己的高分辨率计时器?
是否可以模拟 Android Camera 类?
@Override
public void setUp() {
_camera = Mockito.mock(Camera.class);
}
Run Code Online (Sandbox Code Playgroud)
无法生成模拟(ExceptionInitializerError在 Mockito's 中createProxyClass)。
我是否应该围绕Camera(不是我最喜欢的解决方案,真的只想模拟课程......)创建某种包装器?
或者,我应该使用与 Mockito 不同的模拟库吗?
希望有人能指出我正确的方向。
完整的堆栈跟踪 ExceptionInitializerError
java.lang.ExceptionInInitializerError
at org.mockito.internal.creation.jmock.ClassImposterizer.createProxyClass(ClassImposterizer.java:85)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:62)
at org.mockito.internal.creation.jmock.ClassImposterizer.imposterise(ClassImposterizer.java:56)
at org.mockito.internal.creation.CglibMockMaker.createMock(CglibMockMaker.java:23)
at org.mockito.internal.util.MockUtil.createMock(MockUtil.java:26)
at org.mockito.internal.MockitoCore.mock(MockitoCore.java:51)
at org.mockito.Mockito.mock(Mockito.java:1243)
at org.mockito.Mockito.mock(Mockito.java:1120)
at com.cleancode.lifesaver.flashlight.test.FlashLightTests.setUp(FlashLightTests.java:20)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:190)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:175)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:555)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1661)
Caused by: java.lang.VerifyError: org/mockito/cglib/core/ReflectUtils
at org.mockito.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:167)
at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25)
at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217)
at org.mockito.cglib.core.KeyFactory$Generator.create(KeyFactory.java:145)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:117)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:109)
at org.mockito.cglib.core.KeyFactory.create(KeyFactory.java:105)
at org.mockito.cglib.proxy.Enhancer.<clinit>(Enhancer.java:70)
... 18 more
Run Code Online (Sandbox Code Playgroud) 出于某种原因,我没有按照一个非常简单的PowerMock示例.
我包含powermock-mockito-1.5.1-full在我的类路径中,并尝试测试公共最终方法(遵循此示例).
由于某种原因,我无法进行PowerMock课程导入.
import org.junit.*;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.cleancode.lifesaver.camera.*;
@RunWith(PowerMockRunner.class)
@PrepareForTest(android.hardware.Camera.class)
public class CameraTests {
private android.hardware.Camera _cameraMock;
@Before
public void setUp() {
_cameraMock = PowerMockito.mock(android.hardware.Camera.class);
}
@Test
public void releaseCamera() {
ICamera camera = new Camera(_cameraMock);
// Compile error: PowerMock can't be resolved
PowerMock.replay(_cameraMock);
// I also tried PowerMockito.replay(_cameraMock) but that also doesn't exist.
camera.release();
Mockito.verify(_cameraMock).release();
}
}
Run Code Online (Sandbox Code Playgroud)
正如评论所解释的那样,PowerMock无法从power mock jar导入类.
这感觉就像一个愚蠢的问题,但我真的在互联网上找不到任何东西.
我应该在哪里找到静态类 …
我正在努力,真的,我正在努力。但我无法理解 ASP NET Core 中的授权概念。
我有:
什么有效:
什么不起作用:
[Authorize]属性修饰的任何控制器进行的任何调用。我读过这个、这个、这个、我能找到的关于 asp net core 身份验证/授权的每个 MSDN 页面,并且我尝试了许多不同的 nuget 包来完成工作。但什么也没有给出。
使用Keycloak.AuthServices.Authentication和Keycloak.AuthServices.Authorization实现了大部分目标,但即使如此,我也陷入了我真正想要授权的部分。无论我尝试什么,我都会不断收到[Authorize]修饰调用的 401 响应。
我的 keycloak 配置非常简单:
似乎做了它必须做的事情,我可以在我的角度前端应用程序中进行身份验证。
我设置的角度应用程序使用keycloak-angular它来将承载 JWT 复制到我向 REST API 后端发出的每个请求的 https 标头中。
在我的 ASP NET core 后端中,我设置了 Keycloak.AuthServices …
c# ×6
java ×2
mockito ×2
wpf ×2
android ×1
appdomain ×1
arm ×1
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
camera ×1
data-binding ×1
dbcontext ×1
gcc ×1
junit ×1
jwt ×1
keycloak ×1
mocking ×1
nunit ×1
powermock ×1
progress-bar ×1
repository ×1
session ×1
timer ×1