小编yes*_*ska的帖子

根据操作名称授权用户

我有很多控制器有很多动作.每个操作都有自己的角色(角色名称= ControllerName.actionName).

在以前的版本中,我可以测试当前用户是否可以使用"通用"AuthorizeAttribute访问操作:

public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
    string currentAction = actionContext.ActionDescriptor.ActionName;
    string currentController = actionContext.ActionDescriptor.ControllerDescriptor.ControllerName;
    Roles = (currentController + "." + currentAction).ToLower();
    base.OnAuthorization(actionContext);
}
Run Code Online (Sandbox Code Playgroud)

使用asp.net 5版本,我发现我需要使用需求(如何在ASP.NET Core中创建自定义AuthorizeAttribute?).问题是AuthorizationContext没有向我们提供有关用户尝试访问的操作的信息.

我不想在每个操作上放置Authorize属性,有没有办法用新框架实现我的要求?(我更喜欢避免使用HttpContext.Current,它不适合管道架构)

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

22
推荐指数
1
解决办法
9346
查看次数

有 requirejs 在模块加载时运行回调

我需要在加载模块时加载 css,所以我使用 shims 这样做:

function loadCss(url) {
    var link = document.createElement("link");
    link.type = "text/css";
    link.rel = "stylesheet";
    link.href = url;
    document.getElementsByTagName("head")[0].appendChild(link);
}

requirejs.config({ paths: paths, shim: {
    'easyzoom': {
        'deps': ['jquery'],
        init: function () { loadCss('/lib/easyzoom/css/easyzoom.css'); }
    }}
});
Run Code Online (Sandbox Code Playgroud)

它适用于其他库,如 Datatables,因为它们是非 Amd 模块。但是对于 Amd 模块,requireJs 不会寻找垫片,因此不会提升我的 init 函数。

有没有办法在加载模块后调用回调?或者加载一个 Amd 模块,因为它是一个普通的 javascript 文件来寻找垫片?

javascript amd requirejs js-amd

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

MvcOptions.InputFormatters不适用于asp.net vnext beta7

我的应用程序在迁移到beta 6/7之后停止工作,在调查之后,我发现我的json反序列化器不再使用(Jil),它被要求写入而不是用于阅读.

现在已经3天了,我正在搜索论坛并阅读aspnet代码,但我还没有找到问题.

我注意到JSON.net在beta 6中无处不在,在beta 7中稍微少一点.

这是我的代码:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvcCore(options =>
        {
            var jilFormatter = new JilMediaTypeFormatter();
            options.OutputFormatters.Clear();
            options.OutputFormatters.Add(jilFormatter);
            options.InputFormatters.Clear();
            options.InputFormatters.Add(jilFormatter);

            options.FormatterMappings.SetMediaTypeMappingForFormat("json", MediaTypeHeaderValue.Parse("application/json"));

            options.ModelBinders.Add(new DocumentModelBinder());
            options.ModelBinders.Add(new DataTablesBinder());
        });
        services.AddDataProtection();
        services.AddWebEncoders();

    }
Run Code Online (Sandbox Code Playgroud)

即使我只是在没有添加对象的情况下执行InputFormatters.Clear(),它也会对请求进行反序列化,我不知道它是如何做到的.

我的JIL InputFormatter/OutputFormatter(ouputformatter工作,我可以在CanWrite中断,但CanRead没有任何反应)

internal class JilMediaTypeFormatter : IOutputFormatter, IInputFormatter
{
    private static readonly string [] _readableTypes = new[] { "application/json", "text/json", "text/javascript" };
    private static readonly Task<bool> _done = Task.FromResult(true);

    private readonly Options _options = Options.RFC1123ExcludeNullsIncludeInherited;


    public bool CanWriteResult(OutputFormatterContext context, Microsoft.Net.Http.Headers.MediaTypeHeaderValue contentType)
    {
        return contentType ==null …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core

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

在asp.net核心中实施重试策略

在asp.net核心中实现重试策略的最简单方法是什么?这个想法很简单,如果引发某些特定类型的异常(比如sql deadlock),我们最多重试httprequest N次.

我使用中间件进行som自定义身份验证,我不知道中间件是否是这种机制的最佳选择(我是管道架构的新手,我已经读过有几种类型的组件:Singletons,per - 请求等).

更新:这里给出了Sql死锁作为一个例子,我的应用程序只有其中的restful webservices,每个请求都很短,并且完全在Serializable Sql Transaction中运行(没有其他副作用,我无法像发送电子邮件那样回滚或删除文件...).因为我正在使用事务,并且因为我无法保证我的事务将始终以相同的顺序使用表(这取决于谁调用webservices),死锁是不可避免的,所以我需要有一个所有的重试策略httprequest.(问题不是关于交易和死锁,而是如何在asp.net核心中实施重试警察)

c# asp.net-core

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