好吧,所以我真的认为我这样做是正确的,但饼干没有被清除.
Session.Clear();
HttpCookie c = Request.Cookies["MyCookie"];
if (c != null)
{
c = new HttpCookie("MyCookie");
c["AT"] = null;
c.Expires = DateTime.Now.AddDays(-1);
Request.Cookies.Add(c);
}
return RedirectToAction("Index", "Home");
Run Code Online (Sandbox Code Playgroud)
当重定向发生时,它再次找到cookie并继续前进,就好像我从未注销过一样.有什么想法吗?
好的,所以我在使用node.js应用程序时在我的Sublime编辑器上安装了Linter.它捕获的一件事说我应该总是使用!==将一个对象比较为null(我通常使用!=).
所以我改变了......但后来我注意到了!==没有用.
我有这种情况:
var x = null;
if (x !== null)
console.log('x is not equal to null');
Run Code Online (Sandbox Code Playgroud)
当我使用!==控制台打印那条线时,即使它显然不是真的.当我把它切换回来时!它表现正常.
所以我的问题是,为什么linter告诉我要使用!==如果它没有做我想要它...
我知道我错过了什么.
更新 好的,所以它可能比我原先想象的要复杂一点.在我的真实代码中,我使用了!==与node.js GLOBAL对象.
console.log('Global User: ' + GLOBAL.User);
if (GLOBAL.User != null)
{
console.log('User is not null');
}
Run Code Online (Sandbox Code Playgroud)
即使GLOBAL.User为空,控制台行也会打印...
也许这个对象很特别?
更新2
好的,所以在阅读完评论并查看我的代码之后,我已经了解到!==如果对象未定义而不是null,则可能会出现问题(请参阅此文章:为什么null是一个对象,null和undefined之间有什么区别? ?).
所以在我的情况下,我的全局变量可能是,取决于调用此方法的时间,未定义,空或满数据.我将返回并更新我的代码,以便它永远不会被定义,然后!==将始终如一地工作.
谢谢您的帮助!
谢谢,大卫
我想加密我在cookie中使用的ID.我正在使用ASP.NET 4.5,所以我想用MachineKey.Protect它来做.
public static string Protect(string text, string purpose)
{
if (string.IsNullOrEmpty(text))
return string.Empty;
byte[] stream = Encoding.Unicode.GetBytes(text);
byte[] encodedValue = MachineKey.Protect(stream, purpose);
return HttpServerUtility.UrlTokenEncode(encodedValue);
}
public static string Unprotect(string text, string purpose)
{
if (string.IsNullOrEmpty(text))
return string.Empty;
byte[] stream = HttpServerUtility.UrlTokenDecode(text);
byte[] decodedValue = MachineKey.Unprotect(stream, purpose);
return HttpServerUtility.UrlTokenEncode(decodedValue);
}
Run Code Online (Sandbox Code Playgroud)
当我使用以下测试数据时:
Protect():
输入:775119337
输出:(饼干) "HyV7ShLrb61cm9HWoHl2lUJtGMlMxLn60q27xwl7Ae1wpv31p7sJqfRDD8TMoSR8n8PPN1K7k7LsrjqWH6A-P17OblK3MApsDQRQLa8xj9A1"
UnProtect():
输出:"NwA3ADUAMQAxADkAMwAzADcA0"
输出不正确,当然,它应该是原始ID I输入.
如何使用解密cookie MachineKey.UnProtect()?
好的,所以我使用Node.js和Azure Blob Storage来处理一些文件上传.
当一个人上传图片时,我想向他们展示图片的缩略图.上传效果很好,我把它存储在我的blob中.
我使用这个很好的链接(在Azure SDK for Node.js中使用BlobService.getBlobURL()生成Azure共享访问签名)来帮助我创建此代码以创建共享访问临时URL.
process.env['AZURE_STORAGE_ACCOUNT'] = "[MY_ACCOUNT_NAME]";
process.env['AZURE_STORAGE_ACCESS_KEY'] = "[MY_ACCESS_KEY]";
var azure = require('azure');
var blobs = azure.createBlobService();
var tempUrl = blobs.getBlobUrl('[CONTAINER_NAME]', "[BLOB_NAME]", { AccessPolicy: {
Start: Date.now(),
Expiry: azure.date.minutesFromNow(60),
Permissions: azure.Constants.BlobConstants.SharedAccessPermissions.READ
}});
Run Code Online (Sandbox Code Playgroud)
这创建了一个网址就好了.
问题是当我拿到临时网址并将其插入我的浏览器时,它只会下载图像而不是查看它(在这种情况下它是一个简单的jpg文件).
这转换为我的代码,我似乎无法在标签中查看它...
链接正确,下载正确的文件......
有什么我需要做的事情来查看图像而不是下载它吗?
谢谢,大卫
UPDATE
好的,我发现这篇文章:http: //social.msdn.microsoft.com/Forums/windowsapps/en-US/b8759195-f490-420b-a587-2bb614366ad2/embedding-images-from-blob-storage-in- SSRS报告-不-不工作
基本上它告诉我在上传时没有设置文件类型,因此浏览器不知道如何处理它.
我使用了以下代码:http://www.snip2code.com/Snippet/8974/NodeJS-Photo-Upload-with-Azure-Storage/
这使我能够正确上传它,现在可以在浏览器中正确查看.
我现在遇到的问题是,当我将tempUrl放入img标签时,我收到此错误:
无法加载资源:服务器响应状态为403(服务器无法验证请求.请确保正确形成Authorization标头的值,包括签名.)
这是完全相同的链接,如果我将其发布到我的浏览器它工作得很好...为什么我不能在图像标签中显示它?
更新2
好吧,所以作为一个愚蠢的测试,我从我的页面加载和img标签从temp url获取源时延迟了7秒.这似乎解决了这个问题(大部分时间),但它显然是一个糟糕的解决方案,即使它工作...
至少这会验证,因为它有时起作用,我的标记至少是正确的. …
所以这很奇怪......在我的C#,WPF应用程序中,我有一个按钮,当点击它时,播放一个简短的音频剪辑,作为帮助文本.大约50%的时间它工作得很漂亮...另外50%它被切断了,我无法弄清楚原因.甚至它被切断的点也各不相同.
我想,也许,代码超出了范围或者某些东西然后停止所以我把它放在另一个线程中...根本不起作用...所以现在我不知道该怎么做.
这是我的按钮点击事件的代码.
try
{
string path = System.IO.Path.Combine(ConfigurationManager.AppSettings["MediaPath"], Global.Language);
path = System.IO.Path.Combine(path, "visitorTypes.mp3");
if (Global.PlaySound)
{
string p = path.ToString();
MediaPlayer mplayer = new MediaPlayer();
mplayer.Open(new Uri(p, UriKind.Absolute));
mplayer.Play();
}
//a bunch of other code
}
catch (Exception ex)
{
Util.HandleError(ex);
}
Run Code Online (Sandbox Code Playgroud)
思考?
我正在使用Moq在我的.net core 2应用程序中进行自动化测试.我们使用承载身份验证,并且需要能够从HttpContext对象中提取名称以确保我们拥有正确的用户:
var userName = HttpContext.User.Identity.Name;
Run Code Online (Sandbox Code Playgroud)
我发现了很多使用System.Web的例子,但没有一个能让我模拟Core 2的设置.
我正在使用.Net Core 2 Web API,其架构使用谓词,当我尝试使用Moq对我的代码进行单元测试时会导致一些问题.
我的每个存储库都从一个基本存储库继承,该存储库具有如下基本方法:
public T GetSingle(Expression<Func<T, bool>> predicate)
{
return _context.Set<T>().FirstOrDefault(predicate);
}
public virtual IEnumerable<T> FindBy(Expression<Func<T, bool>> predicate)
{
return _context.Set<T>().Where(predicate);
}
Run Code Online (Sandbox Code Playgroud)
在我的用户控制器注册方法中,我想确保我不允许重复的电子邮件,我这样做:
var emailCheck = _userRepository.GetSingle(x => x.Email == user.Email);
if (emailCheck != null)
{
// duplicate
return StatusCode(StatusCodes.Status409Conflict, "This email is already in use.");
}
Run Code Online (Sandbox Code Playgroud)
在我的单元测试中,我想进行测试以确保我们不允许重复,所以我设置了它:
public void Signup_Fail_DuplicateEmail_Controller_Test()
{
var user = UserHelper.CreateSignupUser();
user.Email = "duplicate@test.com";
var uRepo = new Mock<IUserRepository>();
uRepo.Setup(u => u.GetSingle(x => x.Email == user.Email)).Returns(user);
var uc = new UserController(uRepo.Object);
var …Run Code Online (Sandbox Code Playgroud) 好吧,我以为我有这个工作,但是......不.:)
所以我只是想从我的.Net Core 2 Web API返回一个CSV文件.每次我这样做,我得到406状态代码......
这是我的代码.
[HttpGet]
[Route("/progress/data.csv")]
[Produces("text/csv")]
public IActionResult GetCSV()
{
try
{
return Ok("1,2,3");
}
catch (Exception ex)
{
HandleError(ex);
return BadRequest(ex);
}
}
Run Code Online (Sandbox Code Playgroud)
我一直在想我需要在我的Startup.cs文件中添加格式化程序或其他东西,但这也没有用.
看起来这应该是一个简单的请求,但我发现这个主题上的互联网很少.
谢谢!
c# ×6
cookies ×2
moq ×2
asp.net-4.5 ×1
asp.net-core ×1
audio-player ×1
azure ×1
compare ×1
csv ×1
javascript ×1
node.js ×1
unit-testing ×1
wpf ×1