小编Son*_*Sam的帖子

如何在MVC6中正确地注入HttpContext

我的API中的数据服务层需要httpcontext中请求的信息,我读了这个问题,他们说我应该使用ActionContext而不是HttpContext.Current(在MVC6中停止).

第一种方法是通过重写此方法来设置控制器内的数据:

public void OnActionExecuting(ActionExecutingContext context)
{
    var routeData = context.RouteData;
    var httpContext = context.HttpContext;
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者通过注入服务层来使用DI

public MyService(IContextAccessor<ActionContext> contextAccessor)
{
    _httpContext = contextAccessor.Value.HttpContext;
    _routeData = contextAccessor.Value.RouteData;
}
Run Code Online (Sandbox Code Playgroud)

但我不确定下面列出的这两行代码是否正确

services.AddTransient<IContextAccessor<ActionContext>,ContextAccessor>();
services.AddTransient<IContextAccessor<ActionContext>>();
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到了这个错误.

尝试激活时无法解析"Microsoft.AspNet.Mvc.ActionContext"类型的服务

更新 project.json web项目

"DIMultiTenan.Infrastructure": "",
"DIMultiTenan.MongoImplementation": "", 
"Microsoft.AspNet.Server.IIS": "1.0.0-beta3",
"Microsoft.AspNet.Mvc": "6.0.0-beta3",
"Microsoft.AspNet.StaticFiles": "1.0.0-beta3",
"Microsoft.AspNet.Server.WebListener": "1.0.0-beta3"
Run Code Online (Sandbox Code Playgroud)

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

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

由于约束错误,无法在C#中实现VB接口

我无法弄清楚这一点,我不知道为什么.抱歉,这是一个糟糕的问题,我在VB中有以下界面

Public Interface IFoo  

    Sub ExecuteSQL(sql As String, ParamArray parameters() As SqlParameter)
    Sub ExecuteSQL(sql As String, useTransaction As Boolean, ParamArray parameters() As SqlParameter)
    Function ExecuteSQLAsync(sql As String, ParamArray parameters() As SqlParameter) As Task
    Function ExecuteSQLAsync(sql As String, useTransaction As Boolean, ParamArray parameters() As SqlParameter) As Task
    Function ExecuteSQL(Of T As Structure)(sql As String, ParamArray parameters() As SqlParameter) As T
    Function ExecuteSQL(Of T As Structure)(sql As String, useTransaction As Boolean, ParamArray parameters() As SqlParameter) As T
    Function ExecuteSQLAsync(Of T As Structure)(sql …
Run Code Online (Sandbox Code Playgroud)

c# vb.net visual-studio visual-studio-2013

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

在运行时更改注入的对象

我希望IUserRepository具有多个实现,每个实现都可以使用MongoDB或任何SQL数据库的数据库类型.为此,我有ITenant接口,它具有连接字符串和其他租户配置.租户已被注入IUserRepository MongoDB或任何SQLDB实现.我需要知道的是如何正确地更改注入的存储库以选择租户的数据库.

接口

public interface IUserRepository 
{
    string Login(string username, string password);
    string Logoff(Guid id);
}

public class User
{
    public Guid Id { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public string LastName { get; set; }
    public string FirstName { get; set; }

}

public interface ITenant
{
    string CompanyName { get; }
    string ConnectionString { get; }
    string DataBaseName { get; }
    string EncriptionKey { get; } …
Run Code Online (Sandbox Code Playgroud)

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

7
推荐指数
2
解决办法
3273
查看次数

在ASP.NET vNext过滤器中获取注入的对象

我正在尝试创建自定义authorize属性,但在使用默认依赖注入框架的asp.net vnext中,我不知道如何获取注入的对象.我需要在默认的ctor中获取注入的对象.

   public  class CustomAttribute
{

   private IDb _db;

   public CustomAttribute()
   {
       _db = null; // get injected object
   }

   public CustomAttribute(IDb db)
   {
       _db = db;
   }

   // apply all authentication logic
}
Run Code Online (Sandbox Code Playgroud)

asp.net-core

6
推荐指数
1
解决办法
758
查看次数

MongoDB Map Property 'new' in findAndModify 使用 FindOneAndUpdateOptions 类 C# 驱动程序

我正在尝试getNextSequence为此链接上的 mongoDB 解释实现一个函数 我正在使用拿铁 C# 驱动程序,但我不确定如何new : trueFindOneAndUpdateOptions

MongoDB 代码

function getNextSequence(name) {
   var ret = db.counters.findAndModify(
          {
            query: { _id: name },
            update: { $inc: { seq: 1 } },
            new: true,
            upsert: true
          }
   );

   return ret.seq;
}
Run Code Online (Sandbox Code Playgroud)

C# 代码

    public async Task<long> GetNextObjectSequenceAsync(string objectName)
    {
        var collection = this.Context.GetCollection<ObjectSequence>("Counters");
        var filter = new FilterDefinitionBuilder<ObjectSequence>().Where(x => x.Name == objectName);
        var options = new FindOneAndUpdateOptions<ObjectSequence, ObjectSequence>() { IsUpsert = true };
        var …
Run Code Online (Sandbox Code Playgroud)

c# mongodb mongodb-.net-driver

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

IDX10503:签名验证失败

应用程序重新启动或发布后,我收到以下带有有效令牌的错误

IDX10503: Signature validation failed. Keys tried: 'System.IdentityModel.Tokens.RsaSecurityKey
Exceptions caught:
token: '{"typ":"JWT","alg":"RS256","kid":null}.{"unique_name":"test@test.com","iss":"XXXXXX","aud":"XXXXX","exp":1444876186}'
Run Code Online (Sandbox Code Playgroud)

这是生成KEY的函数

private void generateRsaKeys()
{
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048))
    {

        key = new RsaSecurityKey(rsa.ExportParameters(true));
        credentials = new SigningCredentials (key,SecurityAlgorithms.RsaSha256Signature, SecurityAlgorithms.Sha256Digest);
        rsa.PersistKeyInCsp = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

这就是配置的完成方式

services.ConfigureOAuthBearerAuthentication(options =>
{
    options.AutomaticAuthentication = true;
    options.TokenValidationParameters.IssuerSigningKey = generateRsaKeys();
    options.TokenValidationParameters.ValidAudience = audience;
    options.TokenValidationParameters.ValidIssuer = issuer;

});

app.UseStaticFiles();
app.UseOAuthBearerAuthentication();

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

这是我的控制器上的操作

// POST: /token
[HttpPost()]
public async Task<IActionResult> Token([FromBody] LoginModel model)
{
    if (!ModelState.IsValid) …
Run Code Online (Sandbox Code Playgroud)

c# oauth-2.0 asp.net-core

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

使用 IConfigurationRoot 将环境变量绑定到类

在 dotnet core 中,我想将一组环境变量绑定到一个类,使用IConfigurationRootBind方法与您对appsettings.json

例如

具有以下 appsettings.json

{
    "EnviromentSettings":
    {
        "ValueOne": "Foo1",
        "ValueTwo": "Foo2"
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以将该部分绑定EnvimentSettings到以下类

public class EnviromentSettings
{
    public string ValueOne {get;set;}
    public string ValueTwo {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

使用此代码

public IConfigurationRoot Configuration { get; }

var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

services.Configure<EnviromentSettings>(options => Configuration.GetSection("EnviromentSettings").Bind(options));
Run Code Online (Sandbox Code Playgroud)

我可以对环境变量做类似的事情吗?

c# configuration environment-variables .net-core

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

无法连接到 Cassandra Docker 容器

我有官方的 Cassandra docker 容器在运行,但我无法从示例控制台应用程序访问。我正在使用 Hyper-V 为 Windows 使用 docker

我使用以下命令创建容器: docker run --name dev-cassandra -d cassandra:latest

当我运行应用程序时,它给出以下错误

An unhandled exception of type 'Cassandra.NoHostAvailableException' occurred in Cassandra.dll
Run Code Online (Sandbox Code Playgroud)

示例代码

class Program
{
    static void Main(string[] args)
    {

        var cluster = Cassandra.Cluster.Builder().AddContactPoint("172.17.0.2").Build();
        var session = cluster.Connect("Excelsior");
        var rs = session.Execute("SELECT * FROM sample_table");
        //Iterate through the RowSet
        foreach (var row in rs)
        {
            var value = row.GetValue<int>("sample_int_column");
            //do something with the value
        }
        Console.WriteLine("Hello World!");
    }
}
Run Code Online (Sandbox Code Playgroud)

容器正在运行我通过运行以下命令检查: docker ps

在此处输入图片说明

为了获取网络信息,我运行了这个命令: network inspect …

c# cassandra docker

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

一对多关系Fluent API Code First

这是我的第一个问题,我希望不是一个愚蠢的问题.

我在这里有以下实体

客户公司电话

public class Customers 
{
    public Customers()
    {
        Phones = new List<Phones>();
    }

    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public ICollection<Phones> Phones { get; set; }
}
public class Phones
{
    public Guid Id { get; set; }
    public string Number { get; set; }
    public string Extension { get; set; }

}

public class Companies
{
    public Companies()
    {
        Phones = new …
Run Code Online (Sandbox Code Playgroud)

entity-framework-4.1

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