小编Raz*_*tru的帖子

在asp.net mvc请求中捕获windows用户名

我有一个内部网应用程序asp.net mvc网站.无论如何都要在没有网站完整登录系统的情况下从用户登录窗口.我不想要许可,但我想在服务器上做一些记录以跟踪请求等..

asp.net-mvc

9
推荐指数
1
解决办法
3万
查看次数

localstorage密钥本身占用多少空间?

让我们说我创建一个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)

javascript html5 local-storage

9
推荐指数
1
解决办法
720
查看次数

Asp.Net Core 2.0中的'HttpPostedFileBase'

我最近正在开发一个ReactAPI应用程序,该应用程序调用一个API(由.NET Core 2.0开发)。

我的问题是如何HttpPostedFileBase 在.NET Core 2.0 API中使用以便获取文件内容并将其保存在数据库中。

c# asp.net-core-mvc asp.net-core asp.net-core-2.0

9
推荐指数
4
解决办法
1万
查看次数

乐观并发

我有一个包含多个链接实体的实体框架项目.由于它被多个用户同时使用,我为可能被多个用户同时编辑的实体设置了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可以自己处理日期时间格式转换:/)

c# entity-framework entity-framework-6

7
推荐指数
1
解决办法
2892
查看次数

忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功的条目

我有一个 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

7
推荐指数
1
解决办法
2066
查看次数

带有 MemoryCacheEntryOptions 的内存缓存 GetOrCreate

在当前的实现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 …

caching asp.net-core

5
推荐指数
1
解决办法
6902
查看次数

当我们遇到异常时渲染错误视图

我怎样才能用另一种方式做到这一点?

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

c# asp.net-mvc

4
推荐指数
1
解决办法
2万
查看次数

AngularJS根据布尔值打印是或否

我从数据库到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)

angularjs

4
推荐指数
2
解决办法
8510
查看次数

DataProtection - 在多个应用程序之间共享机器密钥

我们假设我们有两个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)

锁定和竞赛条件问题仍然有效.

c# asp.net-core asp.net-core-2.0

4
推荐指数
1
解决办法
1679
查看次数

Swagger 将 IFormFile 参数列为“对象”类型

我有一个控制器,它请求一个包含 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)

swagger asp.net-core openapi

3
推荐指数
1
解决办法
9909
查看次数