小编psm*_*may的帖子

Python安全的字典导航,正确的方式

TLDR摘要

我编写了navigateDict一个在a上进行安全导航的函数dict,类似于dict.get()嵌套.它取代了像

if 1 in data and 'i' in data[1] and 'a' in data[1]['i']:
    print data[1]['i']['a']
else:
    print "Not found"
Run Code Online (Sandbox Code Playgroud)

与大致相当

found = navigateDict(data, 1, 'i', 'a')
if found is not None:
    print found
else:
    print "Not found"
Run Code Online (Sandbox Code Playgroud)
  • 是否有类似于此标准库的一部分?
  • 是否有更惯用的方式来做同样的事情?
    • 任何需要多次输入任何路径组件键的响应可能都是非答案.

额外细节

实施如下:

# Allow fallback value other than None
def navigateDictEx(d, keys, fallback=None):
    for key in keys:
        if key in d:
            d = d[key]
        else:
            return fallback
    return d

def navigateDict(d, *keys):
    return …
Run Code Online (Sandbox Code Playgroud)

python dictionary idioms

5
推荐指数
2
解决办法
2893
查看次数

在AspNetCore API控制器中,是否有一种公认的方法来干燥出重复的验证代码?

上下文:我被要求维护的AspNetCore控制器包含类似于以下内容的方法:

    // Get api/Foo/ABCXXX/item/12345
    [HttpGet("{accountId}/item/{itemNumber}")]
    public async Task<ActionResult<ItemViewModel>> GetFoo([FromRoute] string accountId, [FromRoute] int itemNumber)
    {
        if (string.IsNullOrWhiteSpace(accountId))
        {
            return BadRequest("accountId must be provided");
        }

        if (itemNumber < 0)
        {
            return BadRequest("itemNumber must be positive");
        }

        if (!await CanAccessAccountAsync(accountId))
        {
            return Forbid();
        }

        // Returns null if account or item not found
        var result = _fooService.GetItem(accountId, itemNumber);

        if (result == null)
        {
            return NotFound();
        }

        return result;
    }

    // GET api/Foo/ABCXXX
    [HttpGet("{accountId}")]
    public async Task<ActionResult<IEnumerable<ItemViewModel>>> GetFoos([FromRoute] string accountId)
    {
        if (string.IsNullOrWhiteSpace(accountId)) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core

0
推荐指数
1
解决办法
61
查看次数

标签 统计

asp.net-core ×1

c# ×1

dictionary ×1

idioms ×1

python ×1