我有一个内部网应用程序asp.net mvc网站.无论如何都要在没有网站完整登录系统的情况下从用户登录窗口.我不想要许可,但我想在服务器上做一些记录以跟踪请求等..
让我们说我创建一个localstorage键并给它一个空字符串.keyitem的名称是否占用与每个字符的值相同的空间量?
例如
localStorage.setItem("keyitem","")
//Equal the space of this other one under?
localStorage.setItem("key","item");
Run Code Online (Sandbox Code Playgroud)
此外,密钥的数量是否重要?例如
localStorage.setItem("key","");
//Equal the amount of storage as the 3 under combined?
localStorage.setItem("k","");
localStorage.setItem("o","");
localStorage.setItem("h","");
Run Code Online (Sandbox Code Playgroud) 我最近正在开发一个ReactAPI应用程序,该应用程序调用一个API(由.NET Core 2.0开发)。
我的问题是如何HttpPostedFileBase 在.NET Core 2.0 API中使用以便获取文件内容并将其保存在数据库中。
我有一个包含多个链接实体的实体框架项目.由于它被多个用户同时使用,我为可能被多个用户同时编辑的实体设置了RowVersion-Field.不幸的是,我现在OptimisticConecurrencyException每次尝试保存一个新实体时都会得到一个新实体,该实体链接到一个已经存在的实体.
存储更新,插入或删除语句会影响意外的行数(0).自实体加载后,实体可能已被修改或删除.有关理解和处理乐观并发异常的信息,请参阅http://go.microsoft.com/fwlink/?LinkId=472540.
现在的问题是,这个错误并没有真正给出关于错误所在位置的任何指示.它可能是在此期间被修改的基础模型,新模型或其他东西可能存在验证错误.
我用来添加新实体的代码如下:
using (ctx = new DbContext())
{
try
{
ctx.Samples.Add(model);
ctx.SaveChanges();
}
catch (DbUpdateConcurrencyException ex)
{
LogManager.HandleException(ex.InnerException);
}
}
Run Code Online (Sandbox Code Playgroud)
model 是我想要添加到数据库的模型
编辑:如上所示,我修改了代码以忽略底层模型的更新.此外,我通过以下方式验证
ctx.Database.log = s => Debug.Write(s);
Run Code Online (Sandbox Code Playgroud)
只有一个insert语句被发送到数据库而不是另一个更新语句.
INSERT [dbo].[Samples]([IDSample], [ModificationDate], [IDUser])
VALUES (@0, @1, @2)
SELECT [RowVersion]
FROM [dbo].[Samples]
WHERE @@ROWCOUNT > 0 AND [IDSample] = @0 AND [ModificationDate] = @1
Run Code Online (Sandbox Code Playgroud)
如果我更新实体并且rowversion列不匹配,我会理解异常,但在这种情况下,它是一个全新的实体.有没有办法看看其中一个属性是否格式错误?
EDIT2:
我现在使用DateTime.Today代替DateTime.Now而不是仅仅修剪毫秒.看似在ModificationDate上的datetime2(4)存在一些问题.我已经确保将ModificationDate截断为4毫秒,因此不应该有解析错误.
EDIT3:
切换回DateTime.Now并修剪它停止工作的毫秒后,实体不再插入数据库.这可能是由于sql server在基于毫秒值匹配实体时出现问题.我执行了EF生成的SQL,如上所示,带有一些虚构的值,虽然在某些情况下查询没有返回rowversion值,但它仍然通过了.就实体框架而言,客户端会将此解释为0行的返回值,因此调用并发异常.(还应注意,ModificationDate和IDSample一起是实体的主键.)
Edit4:
我现在正在使用DateTime.Today,然后添加所需的精度,这对我有用.这可以标记为已解决.(Altough我原本预计EF可以自己处理日期时间格式转换:/)
我有一个 ASP .Net Core 2.2 Web API。在我的一个控制器操作中,我向 MySQL 数据库表中添加了一堆行(我使用的是 Pomelo)。
例如:
_dbContext.AddRange(entities);
_dbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我添加的实体有两个主键(复合主键),当我将它们添加到 DbContext 时,这些键已经填充在实体集合中(即我自己设置键 - 没有“自动增量”或类似的东西数据库生成密钥的地方)
如果我添加的任何实体已经存在于数据库中,就重复的主键而言,那么显然 SaveChanges() 会抛出异常,并且整个事务将回滚。
有没有办法告诉 EF Core 忽略失败的实体?即忽略数据库中已经存在的实体,并提交成功的实体(即数据库中不存在的实体)?而不是抛出异常并回滚整个事务的当前行为?
谢谢
mysql dbcontext asp.net-core ef-core-2.2 entity-framework-core-2.2
在当前的实现IMemoryCache接口中有以下方法:
bool TryGetValue(object key, out object value);
ICacheEntry CreateEntry(object key);
void Remove(object key);
Run Code Online (Sandbox Code Playgroud)
我们可以通过以下方式查询缓存中的条目:
//first way
if (string.IsNullOrEmpty
(cache.Get<string>("timestamp")))
{
cache.Set<string>("timestamp", DateTime.Now.ToString());
}
//second way
if (!cache.TryGetValue<string>
("timestamp", out string timestamp))
{
//
cache.Set<string>("timestamp", DateTime.Now.ToString());
}
Run Code Online (Sandbox Code Playgroud)
但是还有另一种方法应该GetOrCreate使用工厂参数执行缓存应该执行的操作 ( ):
public static TItem GetOrCreate<TItem>(this IMemoryCache cache, object key, Func<ICacheEntry, TItem> factory)
{
object obj;
if (!cache.TryGetValue(key, out obj))
{
ICacheEntry entry = cache.CreateEntry(key);
obj = (object) factory(entry);
entry.SetValue(obj);
entry.Dispose();
}
return (TItem) obj;
}
Run Code Online (Sandbox Code Playgroud)
As you can …
我怎样才能用另一种方式做到这一点?
public ActionResult SomeAction(int id)
{
try
{
var model = GetMyModel(id);
return View(model);
}
catch(Exception e)
{
var notFoundViewModel = new NotFoundViewModel { Some Properties };
return View("~/Views/Shared/NotFound.cshtml", notFoundViewModel);
}
}
Run Code Online (Sandbox Code Playgroud)
url 将会抛出异常Controller/SomeAction/NotFoundId。我讨厌在项目中出现类似的东西:~/Views/Shared/NotFound.cshtml。
我从数据库到angularJs得到Bool值
<td>
{{patient.Alcoholic}}
</td>
Run Code Online (Sandbox Code Playgroud)
而不是假或我需要打印是或否
<td>
{{patient.Alcoholic // can i have if-else condition over here ??}}
</td>
Run Code Online (Sandbox Code Playgroud) 我们假设我们有两个API,一个用于UserManagement,一个用于Auth.
UserManagement API负责初始邀请电子邮件(我需要一个,ResetPasswordToken因为这是我目前的应用流程),Auth API并负责密码恢复(我需要的地方ResetPasswordToken).
当然,我需要为两个应用程序指定相同的机器密钥.
我们还假设这两个应用程序将部署在负载均衡器后面.2个应用程序x 3个实例.
在两个API中保持密钥(Redis等)的共享位置是否足够?
services.AddDataProtection().PersistKeysToRedis(/* */);
Run Code Online (Sandbox Code Playgroud)
我认为如果它适用于一个应用程序,多个实例场景,它将适用于多个应用程序,多个实例场景.
PS:我无法找到任何关于任何锁定机制的东西(似乎只有一个看看它的行为)
我关心的另一件事:竞争条件?!
Duc_Thuan_Nguy 2017年6月9日
出于好奇,密钥滚动如何处理并发?例如,假设我们有一个包含2台计算机和共享网络目录的Web场.可能存在竞争条件,其中两台机器同时想要滚动新密钥.这种情况如何处理?或者两台机器可以自己刷新密钥,只要它们可以访问这两个新密钥,它们就可以平滑地取消保护数据?
评论参考:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-management
稍后编辑:看起来如果您有多个应用程序,仅指定要在同一位置保留密钥是不够的.应用鉴别器有一个概念(所有应用程序都是隔离的).
您将需要以下内容:
services.AddDataProtection(configure => {
configure.ApplicationDiscriminator = "App.X";
}).PersistKeysToRedis(/* */);
Run Code Online (Sandbox Code Playgroud)
锁定和竞赛条件问题仍然有效.
我有一个控制器,它请求一个包含 IFormFile 作为其属性之一的模型。对于请求描述,Swagger UI(我使用 Swashbuckle 和 OpenApi 3.0 for .NET Core)将文件属性的类型列出为类型对象。有没有办法让 Swagger UI 表示确切的类型及其 JSON 表示形式来帮助客户端?
请求模型的控制器如下所示。
[HttpPost]
[Consumes("multipart/form-data")
public async Task<IActionResult> CreateSomethingAndUploadFile ([FromForm]RequestModel model)
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
模型定义如下:
public class AssetCreationModel
{
[Required}
public string Filename { get; set; }
[Required]
public IFormFile File { get; set; }
}
Run Code Online (Sandbox Code Playgroud) asp.net-core ×5
c# ×4
asp.net-mvc ×2
angularjs ×1
caching ×1
dbcontext ×1
ef-core-2.2 ×1
html5 ×1
javascript ×1
mysql ×1
openapi ×1
swagger ×1