小编swa*_*nee的帖子

ASP.NET核心中的OAuth授权服务

在Web API 2中,您曾经能够通过中间件设置OAuth授权服务器来创建端点以发出令牌,如下所示:

//Set up our auth server options.
var OAuthServerOptions = new OAuthAuthorizationServerOptions()
            {
                AllowInsecureHttp = true,
                TokenEndpointPath = new PathString("/token"),
                AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
                Provider = new SimpleAuthorizationServerProvider()
            };

 // Sets up the token issue endpoint using the options above
 app.UseOAuthAuthorizationServer(OAuthServerOptions);
Run Code Online (Sandbox Code Playgroud)

也许我错过了它,但我想弄清楚如何在ASP.NET Core中做到这一点.我查看了源代码(https://github.com/aspnet/Security),但我真的没有看到类似的东西.有没有新的方法来实现这一目标?我是否需要创建一个控制器并自己完成?

我看到如何通过中间件设置OAuth身份验证,但这涉及我从API发出声明的授权部分.

asp.net oauth asp.net-core-mvc asp.net-core

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

在ThreadContextChanged上,AsyncLocal值更新为null

我试图了解AsyncLocal应该如何在.Net 4.6中运行.我将一些数据放入AsyncLocal ......但是当ThreadContext更改时,它被设置为null.我正在使用AsyncLocal的全部原因是在等待异步操作时尝试跨线程保留/缓存此值.知道为什么会特别调用它并在上下文发生变化时设置为null吗?关于AsyncLocal的文档非常稀疏......也许我已经把它弄错了.

public class RequestContextProvider : IRequestContextProvider
{
    private static readonly AsyncLocal<IRequestContext> _requestContext = new AsyncLocal<IRequestContext>(ValueChangedHandler);

    private static void ValueChangedHandler(AsyncLocalValueChangedArgs<IRequestContext> asyncLocalValueChangedArgs)
    {
        **//This is just here to observe changes...when I await a call that 
        //causes control to pass to a different thread..this is called 
        //with a current value of null.**
        var previousValue = asyncLocalValueChangedArgs.PreviousValue;
        var currentValue = asyncLocalValueChangedArgs.CurrentValue;
        var contextChanged = asyncLocalValueChangedArgs.ThreadContextChanged;
    }

    public void SetContext(IRequestContext requestContext)
    {
        _requestContext.Value = requestContext;
    }

    public IRequestContext GetContext()
    {
        return _requestContext.Value;
    } …
Run Code Online (Sandbox Code Playgroud)

c# async-await dnx

13
推荐指数
1
解决办法
1244
查看次数

从Asp.Net MVC 6 API返回JSON错误

我正在尝试使用MVC 6构建一个Web API.但是当我的一个控制器方法抛出一个错误时,响应的内容是一个格式很好的HTML页面,如果这是一个MVC应用程序,它将提供非常丰富的信息.但由于这是一个API,我宁愿返回一些JSON.

注意:我的设置现在是超级基础,只需设置:

    app.UseStaticFiles();
    app.UseIdentity();

    // Add MVC to the request pipeline.
    app.UseMvc();
Run Code Online (Sandbox Code Playgroud)

我想普遍地设置它.有没有"正确/最好"的方法在MVC 6中为API设置它?

谢谢...

json asp.net-web-api asp.net-core-mvc asp.net-core

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

ASP.Net MVC中的全局错误记录6

我正在测试一个MVC 6 Web Api,并希望实现登录到全局错误处理程序.只是保证在没有记录的情况下没有错误退出系统.我创建了一个ExceptionFilterAttribute并在启动时全局添加它:

public class AppExceptionFilterAttribute : ExceptionFilterAttribute
{
    public override void OnException(ExceptionContext context)
    {
        //Notice pulling from HttpContext Application Svcs -- don't like that
        var loggerFactory = (ILoggerFactory)context.HttpContext.ApplicationServices.GetService(typeof (ILoggerFactory));

        var logger = loggerFactory.Create("MyWeb.Web.Api");
        logger.WriteError(2, "Error Occurred", context.Exception);

        context.Result = new JsonResult(
            new
            {
                context.Exception.Message,
                context.Exception.StackTrace
            });
    }
}
Run Code Online (Sandbox Code Playgroud)

现在在启动时,我正在添加此过滤器:

services.Configure<MvcOptions>(options =>
{
    options.Filters.Add(new AppExceptionFilterAttribute());
});
Run Code Online (Sandbox Code Playgroud)

这一切似乎都是一种蛮力...有没有更好的方法来使用MVC 6?

我不喜欢或不确定这种方法的事情:

  1. 不喜欢从http上下文中提取DI
  2. 没有太多关于发起错误的控制器的上下文(也许我可以通过某种方式从上下文中获取它).

我能想到的另一个选择是拥有一个基本控制器,它接受所有控制器继承的ILoggerFactory.

想知道是否有某种诊断中间件允​​许插入日志...

asp.net asp.net-web-api asp.net-core-mvc

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

在Docker中的.Net Core 2.0上运行IdentityServer4 - 访问主机资源

我正在尝试转换一个服务(IdentityServer 4 v2),它是一个.Net Core 2.0应用程序,可以在Docker for Windows上运行.这只是在开发工作站上.我为现有的Net Core 2.0服务做了标准的Visual Studio 2017"添加Docker支持".该服务启动正常,但由于这些问题而失败:

  1. 该服务正在寻找安装在本地主机上的证书.在docker中运行它不会看到此证书.
  2. 该服务使用主机etc/Hosts文件中的DNS来查找我们的数据库服务器.在Docker上运行的服务看不到主机DNS.

我试图将docker compose中的network_mode设置为"host",但是无法构建.建立这样一个环境的建议方法是什么?

使用docker compose设置运行时,默认的compose和配置非常简单:

version: '3'

services:
  identity.server:
    image: identity.server
    ports:
      - "8100:8100"
    build:
      context: ./src/Identity.Server
      dockerfile: Dockerfile
Run Code Online (Sandbox Code Playgroud)

引用的dockerfile:

FROM microsoft/dotnet:2.0-runtime
ARG source
WORKDIR /app
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "Identity.Server.dll"]
Run Code Online (Sandbox Code Playgroud)

我已经阅读了以下答案,但它似乎不适用于.Net本身:https://devops.stackexchange.com/questions/1501/configure-docker-to-use-ssl-for-a-private -registry上-窗口10?newreg = 0d065d6c37214be4bd1f02a45e1248ba

我们正在访问这样的证书,它只是返回null.如果服务在Docker之外运行,则会发现它.

var cert = X509.LocalMachine.CertificateAuthority.Thumbprint
.Find(settings.CertificateThumbprint).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

docker .net-core docker-compose identityserver4

8
推荐指数
1
解决办法
1773
查看次数

NCQRS与JOliver EventStore

有人评估过NCQRS和JOliver的EventStore吗?是否有明显的优势或针对不同的受众?

我见过的:

NCQRS内置了对NServiceBus的支持.不确定支持的NSB版本,但NSB的许可变更使我的项目成为一个问题.不要以为我想永远坚持使用NSB 2.1.我可能会更多地关注MassTransit或RSB.NCQRS似乎也有相当数量的"入门"帮助,这对于像我这样的新手来说很受欢迎.

EventStore似乎有一个总线机制的钩子,但没有内置的实现(可能是错误的).EventStore似乎在3.0版本中有相当多的近期活动,但除了一些简短的代码示例和我发现的播客之外,似乎没有太多的帮助,特别是对于初学者,除了筛选堆栈溢出或组.

如果存在比较,请指出我的方向.如果我的上述假设不正确,请纠正我.

cqrs event-store ncqrs

5
推荐指数
0
解决办法
1095
查看次数

无法在RavenDB 2.x中创建新数据库

Noob RavenDB问题:刚刚关闭了Raven 2.x并将其设置为在IIS中运行.只是尝试通过Studio在RavenDB 2.x中创建一个新的数据库.我的配置中有以下设置:

<add key="Raven/AnonymousAccess" value="All"/>  
Run Code Online (Sandbox Code Playgroud)

我将物理位置设置为允许Everyone完全控制.当我尝试创建一个新数据库时,我得到以下内容:

无法获得此命令的授权.如果您应该有权访问此操作,请联系您的管理员并检查RavenDB中的Raven/AnonymousAccess或Windows身份验证设置

服务器错误:

操作'/ admin/databases/Test'仅供管理员使用

有任何想法吗?谢谢!

ravendb

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

使用CQRS和EventStore创建并发

基线信息: 我正在使用外部OAuth提供程序进行登录.如果用户登录到外部OAuth,则可以进入我的系统.但是,我的系统中可能尚不存在此用户.这不是一个真正的技术问题,但我正在使用JOliver EventStore来实现它的价值.

逻辑:

  1. 我没有为新用户提供指导.我只有一个电子邮件地址.
  2. 我在发送命令之前检查我的读模型,如果用户电子邮件存在,我发出带有ID的Login命令,如果不是,我发出带有生成ID的CreateUser命令.我的问题是新用户的情况.
  3. 使用新ID在事件存储中进行保存.

问题: 假设在读取模型更新之前以某种方式发出了两个创建命令,这是由于浏览器刷新或在实现与读取模型的一致性之前发生的一些其他异常.没关系,这不是我的问题.

会发生什么: 因为新ID是Guid梳子,事件存储器不可能知道这两个CreateUser命令代表同一个用户.当他们到达读取模型时,读取模型将知道(因为他们具有相同的电子邮件)并且可以合并两个记录或采取一些其他补偿操作.但是现在我的阅读模型与事件存储不同步,事件存储仍然认为这些是两个独立的实体.

也许这无关紧要,因为:

  1. 重放事件将对读取模型产生相同的影响,因此应该没问题.
  2. 因为这两个命令都是重复的"创建"命令,所以它们应该包含相同的信息,所以它不像我在事件存储中丢失任何东西.

任何人都能说明他们如何处理类似的问题吗?如果需要进行某些补偿操作,那么当读取模型服务意识到它有重复的条目时会发出某种补偿命令吗?有没有更简单的方法我不考虑?

谢谢!

cqrs event-store

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

Aurelia验证不绑定到文本框组件

我创建了一个简单的文本框组件,它只包含一些样式以及标签和文本框的组合.当我尝试使用典型的绑定语法将验证绑定到此控件时,模糊功能不会导致验证执行.

组件视图如下所示:

<template>
    <div class="form-field">
        <div class="form-field__label">
            ${label}
            <input name.bind="name" id.bind="name" class="form-field__input" type.bind="type" value.bind="value" tabindex.bind="tabIndex"></input>
        </div>
    </div>
</template>
Run Code Online (Sandbox Code Playgroud)

并且viewmodel看起来像:

import {bindable, bindingMode} from 'aurelia-framework';

export class Textbox {
    @bindable({defaultBindingMode: bindingMode.twoWay}) value : string;
    @bindable label : string;
    @bindable type : string = "textbox";
    @bindable tabIndex: number;
    @bindable hidden : boolean;
    @bindable name : string = '';
}
Run Code Online (Sandbox Code Playgroud)

组件使用如下:

<textbox value.bind="emailAddress & validate" type="email"></textbox>
Run Code Online (Sandbox Code Playgroud)

数据绑定按预期工作,但验证绑定不起作用.任何想法都表示赞赏.

javascript aurelia aurelia-validation aurelia-binding

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

在MVC 6中配置NServiceBus总线实例

在之前的ASP.Net版本中,NServiceBus示例声明在global.asax中创建Bus实例.然后在应用程序的Dispose上(在global.asax中),将处理前面提到的总线实例.有点像下面的缩写版本:

IBus bus;

protected void Application_Start()
{
    //Bunch of bus configuration and controller registration etc...
    //Now Create the bus and assign to a local variable so we can dispose it
    var startableBus = Bus.Create(busConfiguration);
    bus = startableBus.Start();
}

public override void Dispose()
{
    if (bus != null)
    {
        bus.Dispose();
    }
    base.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

但是在vNext中,我所知道的Startup.cs中没有配置.是否应该以某种方式保持公交车的实例?vNext是否应该遵循其他一些模式?

谢谢!

nservicebus asp.net-core-mvc asp.net-core

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